如何使用电影机和输入系统通过移动摄像机将播放器旋转到鼠标位置?统一二维
How to rotate player towards mouse position with a moving camera using cinemachine and input system? Unity 2D
我已经知道如何根据鼠标位置旋转播放器了,有很多关于这方面的教程。 然而,每次我需要移动相机(通常使用电影机)时,我都会出现超级紧张的动作,玩家面对鼠标的方式也会发生变化。这是我目前使用的代码, 但这个问题困扰我很久了,似乎找不到任何人问起。
我正在使用新的输入系统,但如果需要我可以使用旧的输入系统并在电影机中使用 2D 摄像机
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
if(angle != 0)
{
savedAngle = angle;
}
transform.rotation = Quaternion.Euler(0, 0, savedAngle);
您可以尝试使用 Mathf.SmoothDamp() 来确保角度不会一下子改变太多。
https://docs.unity3d.com/ScriptReference/Mathf.SmoothDamp.html
类似这样的东西(假设这段代码是 运行 in Update()
/FixedUpdate()
/LateUpdate()
):
// class member variables
[SerializeField] private float _smoothTime = 0.3f;
private float _velocity = 0.0f;
...
...
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
if(angle != 0)
{
savedAngle = Mathf.SmoothDamp(savedAngle, angle, ref _velocity, _smoothTime);
}
transform.rotation = Quaternion.Euler(0, 0, savedAngle);
我已经知道如何根据鼠标位置旋转播放器了,有很多关于这方面的教程。 然而,每次我需要移动相机(通常使用电影机)时,我都会出现超级紧张的动作,玩家面对鼠标的方式也会发生变化。这是我目前使用的代码, 但这个问题困扰我很久了,似乎找不到任何人问起。
我正在使用新的输入系统,但如果需要我可以使用旧的输入系统并在电影机中使用 2D 摄像机
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
if(angle != 0)
{
savedAngle = angle;
}
transform.rotation = Quaternion.Euler(0, 0, savedAngle);
您可以尝试使用 Mathf.SmoothDamp() 来确保角度不会一下子改变太多。
https://docs.unity3d.com/ScriptReference/Mathf.SmoothDamp.html
类似这样的东西(假设这段代码是 运行 in Update()
/FixedUpdate()
/LateUpdate()
):
// class member variables
[SerializeField] private float _smoothTime = 0.3f;
private float _velocity = 0.0f;
...
...
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
if(angle != 0)
{
savedAngle = Mathf.SmoothDamp(savedAngle, angle, ref _velocity, _smoothTime);
}
transform.rotation = Quaternion.Euler(0, 0, savedAngle);