我正在制作一个统一的坦克游戏,我想用鼠标旋转坦克的炮塔。
我试过这个:
Ray dir = MainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(dir, out hit)){}
Turret.transform.LookAt(hit.point);
但是炮塔开始无限旋转。我想是因为 MainCamera 是炮塔的孩子。所以我不知道该怎么做。
你能帮我吗?
0
计算鼠标和炮塔之间的角度,并用 quaternion.lookat 旋转它
0
你可以尝试这样的事情。
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);
}
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(26条)