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);
}
}
原文地址:https://codeday.me/bug/20190628/1317509.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。