C#Unity3D坦克炮塔指向错误的方式

时间:2017-11-12 08:15:01

标签: c# unity3d

我是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);
    }
}

}

0 个答案:

没有答案