这个 Unity3d C# 代码是什么意思?

4
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
1个回答

3

实际上这是一些基本的几何知识。

mouseRay.origin 是相机的世界位置。因此,mouseRay.origin.y 就是相机的高度。

计算 mouseRay.direction / mouseRay.direction.y * mouseRay.origin.y 的结果是下图中红色向量。它只是通过地面缩放了 mouseRay.direction

然后执行 mouseRay.origin - result 以获得世界坐标上的地面击中点。

enter image description here

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

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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接