我想让玩家在3d游戏中面对光标,为此我在玩家中添加了以下代码
void Update()
{
Vector3 objectPos = cam.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 90- angle, 0));
}
当摄像头正对着玩家时,这是有效的,但当我转过玩家时,它不再跟随光标。当我停止时(例如摄像头现在在玩家后面或左边),玩家旋转面对错误的位置。
2条答案
按热度按时间t9aqgxwy1#
您需要将摄影机旋转添加到最终旋转的计算中。
我已经将初始旋转偏移提取到一个单独的变量中。您可能需要重新调整它以获得正确的方向,并可能更改
angle
所影响的轴。还要注意,四元数乘法会考虑操作顺序。只有在旋转完全错误时才切换它。dddzy1tm2#
解决方案是,我需要添加y轴的相机Angular 到90度偏移,如下所示:
现在玩家总是面对光标,即使我转过身来