[英]What does this unity3d c# code mean?
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 - result
以在世界坐標中獲得地面上的生命值。
如果有人感興趣,這里是查看結果的代碼。
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.