问题描述
我一直在研究为什么我的播放器(游戏对象)在我的 TopDown 3D 游戏中没有朝着我的鼠标位置旋转,我似乎找不到我的代码有什么问题,所以我写了这篇文章.我遇到的问题是只有我的播放器的 GameObject(在我的例子中是一个胶囊)向我的鼠标位置旋转,但我的播放器的轴保持不变。换句话说,我不能旋转我的玩家的轴来面对我的鼠标位置,但是我可以旋转我的玩家的游戏对象来面对我的鼠标位置。这真的很难解释,这以前从未发生在我身上。问题是如何旋转我的播放器的轴以面对我的鼠标位置。请记住,我的游戏是自上而下的视图。
这是我用于 playerMouvment 和 mouseLook 的代码:
public class Controller : MonoBehavIoUr
{
public float moveSpeed = 6;
Rigidbody rb;
Camera viewCamera;
Vector3 veLocity;
void Start()
{
rb = GetComponent<Rigidbody>();
viewCamera = Camera.main;
}
void Update()
{
Vector3 mousePos = viewCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,viewCamera.transform.position.y));
transform.LookAt(mousePos + Vector3.up * transform.position.y);
veLocity = new Vector3(Input.GetAxisRaw("Horizontal"),Input.GetAxisRaw("Vertical")).normalized * moveSpeed;
}
void FixedUpdate()
{
rb.MovePosition(rb.position + veLocity * Time.fixedDeltaTime);
}
}
我再次尝试寻找我的代码中的任何错误,但我找不到任何导致这种奇怪情况的东西,所以如果有人能帮我找到一种更好的方法来编写这段代码并解决我的问题,那就太好了!
解决方法
如果我理解正确的话,你的游戏一切都很好,玩家正在按原样转动,但只有在编辑器中玩家的轴(红色、绿色和蓝色箭头)不随玩家转动?
如果这是问题所在,则可能是您使用的是全局空间句柄而不是本地空间。单击我在图像中突出显示的图标应该可以解决问题。
,使用此代码代替 LookAt() 函数
Vector2 direction = mousePos.position - player.transform.position;
player.transform.right /* Maybe you need Up or -Up or -right */ = direction;
这在某些情况下也有效
Vector2 direction = new Vector2
(
mousePos.position.x - player.transform.position.x,mousePos.positoin.y - player.transform.position.y
)
player.transform.right /* Maybe you need Up or -Up or -right */ = direction;