[英]Unity Why can't the player turn towards the cursor in a 3d top-down game? (only Y-axis)Perspective Camera/LookAt
游戏是在 3D 中制作的,这是创建将玩家引导至 cursor 的机制的主要问题,因为它在 2D 中工作。
下面是播放器代码:
void Update(){
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit)){
Vector3 pointToLook = hit.point;
transform.LookAt(2 * transform.position - pointToLook);
}
}
如果我使用 Camera.main.ScreenPointToRay 和 transform.LookAt,那么它们可能不是此任务的最佳选择。
我认为主要问题是你的pointToLook
低于transform.position
,因为你正在投射一个平面,它在下面。 因此,当您使用 lookAt 时,它会将您的lookAt
指向下方。
你的向量transform.position - pointToLook
会看起来有点在平面的方向上,所以你想要的是取这个向量的一部分,即与你的游戏对象在同一平面上。 你的游戏对象水平放置, transform.up
正好在Vector3.Up
所以让我们做一个投影。
Vector3 projection = Vector3.ProjectOnPlane(transform.position - pointToLook, Vector3.up);
您想要的下一件事是将您的transform.forward
(或者可能right
,取决于您的方向)与该投影对齐。
transform.forward = projection.normalized
还有一点需要注意:不要在Update()
中使用Camera.main
,因为它使用FindGameObjectWithTag()
很慢。 在Start()
缓存对相机的引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.