我是Unity3D的新手并开始制作坦克游戏,但我不知道我的代码有什么问题。
坦克游戏使用第三人称相机,我希望炮塔指向十字准线。我使用相机旋转来控制炮塔,所以当玩家旋转相机时,炮塔将指向相同的方向,但不知何时炮塔没有指向正确的方向。
private void turretMove()
{
Quaternion m_CamRotateX = Quaternion.Euler(0, m_Cam.GetComponent<CameraControl>().m_CamX, 0);
m_turret.transform.localRotation = Quaternion.Lerp(m_turret.transform.localRotation, m_CamRotateX, m_turretSpeed * Time.deltaTime);
}
此相机脚本来自互联网
namespace Complete
{
public class CameraControl : MonoBehaviour
{
public Transform target;
public float distance = 5.0f;
public float xSpeed = 120.0f;
public float ySpeed = 120.0f;
public float m_baseDist = 10f;
public float yMinLimit = -20f;
public float yMaxLimit = 80f;
public float distanceMin = 5f;
public float distanceMax = 15f;
private Rigidbody rigidbody;
public float m_CamX = 0.0f;
public float m_CamY = 0.0f;
// Use this for initialization
void Start()
{
Vector3 angles = transform.eulerAngles;
m_CamX = angles.y;
m_CamY = angles.x;
rigidbody = GetComponent<Rigidbody>();
// Make the rigid body not change rotation
if (rigidbody != null)
{
rigidbody.freezeRotation = true;
}
}
public void LateUpdate()
{
m_CamX += Input.GetAxis("Mouse X") * xSpeed * distance * 0.02f;
m_CamY -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
m_CamY = ClampAngle(m_CamY, yMinLimit, yMaxLimit);
Quaternion m_CamRotate = Quaternion.Euler(m_CamY, m_CamX, 0);
distance = Mathf.Clamp(distance - m_baseDist * 5, distanceMin, distanceMax);
RaycastHit hit;
if (Physics.Linecast(target.position, transform.position, out hit))
{
distance -= hit.distance;
}
Vector3 negDistance = new Vector3(0.0f, 2.0f, -distance);
Vector3 position = m_CamRotate * negDistance + target.position;
transform.rotation = m_CamRotate;
transform.position = position;
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360f)
angle += 360f;
if (angle > 360f)
angle -= 360f;
return Mathf.Clamp(angle, min, max);
}
}
}