用鼠标旋转Unity坦克炮塔



我正在制作一个团结的坦克游戏,我想用鼠标旋转坦克的炮塔。主摄影机是炮塔的子摄影机。

我试过这个:

Ray dir = MainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(dir, out hit)){}
Turret.transform.LookAt(hit.point);

但是炮塔开始无限旋转。我想是因为主摄像头是炮塔的孩子。所以我不知道该怎么做。

你能帮我吗?

计算鼠标和转台之间的角度,并用四元数旋转。查看

您可以尝试这样的方法。

using UnityEngine;
public class Rotator : MonoBehaviour
{
[SerializeField]
private Camera _camera;
[SerializeField] private float _rotationFactor = 0.01f;
private Transform _cameraTransform;

void Start()
{
_cameraTransform = _camera.transform;
}
void Update()
{
var screenCenter = new Vector3(Screen.width / 2.0f, Screen.height / 2.0f);
// This prevents camera rotation when mouse is in 100 pixels circle in screen center.
if (!(Input.mousePosition - screenCenter).magnitude < 100f) 
return;

var mouseWorldPos = _camera.ScreenToWorldPoint(Input.mousePosition + Vector3.forward);
Debug.Log(mouseWorldPos);
_camera.transform.rotation = Quaternion.Slerp(
_camera.transform.rotation,
Quaternion.LookRotation(mouseWorldPos - _cameraTransform.position),
_rotationFactor);
}
}

相关内容

  • 没有找到相关文章

最新更新