微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这个unity3d c#代码是什么意思?

Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 newDotPosition =
    mouseRay.origin - mouseRay.direction / mouseRay.direction.y * mouseRay.origin.y;

我看到newDotPosition是游戏对象在地形中的位置.但是下面的代码做了什么?

mouseRay.direction / mouseRay.direction.y * mouseRay.origin.y

解决方法:

实际上它是一些基本的几何形状.

mouseRay.origin是相机的世界位置.所以mouseRay.origin.y是相机的高度.

mouseRay.direction / mouseRay.direction.y * mouseRay.origin.y的结果是下图中的红色矢量.它只是将mouseRay.direction一直扩展到地面.

然后它执行mouseRay.origin – 结果以在世界坐标中获得地面上的生命值.

如果有人感兴趣,这里是查看结果的代码.

public class Test : MonoBehavIoUr
{
    public float originGizmoRadius = 1f;
    public float newDotPositionGizmoSize = 0.5f;
    public float directionLength = 2f;

    Vector3 origin;
    Vector3 direction;
    Vector3 newDotPosition;

    void Update()
    {
        Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);

        origin = mouseRay.origin;
        direction = mouseRay.direction;

        newDotPosition = origin - direction / direction.y * origin.y;
    }

    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawSphere(origin, originGizmoRadius);
        Gizmos.DrawLine(origin, origin + (direction.normalized * directionLength));

        Gizmos.color = Color.green;
        Gizmos.DrawCube(newDotPosition, newDotPositionGizmoSize * Vector3.one);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐