如何使Fps控制器旋转并面向目标

时间:2016-05-13 15:42:53

标签: c# unity3d

我正在开发我的第一个游戏,所以对Unity来说有点新鲜。所以我的问题是我试图通过按下按钮来旋转Fps控制器以面向目标。我设法通过将此代码附加到它来单独旋转相机,但只有相机旋转所以它完全弄乱了行走

public class PlayerRotate : MonoBehaviour {

     public Transform target;

     void Update(){
         if(Input.GetKeyDown("r")){
             print ("Rotate");
             transform.LookAt(target.position);
         }
     } 
 }

我也尝试将相同的脚本附加到Fps控制器,但没有任何反应。非常感谢任何人的帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

FPSCaracterController旋转由包含其资产的MouseLook.cs脚本驱动。 如果打开它,您将看到控制旋转的功能:

public void LookRotation(Transform character, Transform camera)

此方法直接使用鼠标的值修改旋转值,而不进行任何中间操作。因此,如果您想要更改FPController的旋转,则需要修改此方法(或此类)

例如,我做了这个修改,每当用户按下“U”键时FPController旋转180度:

public void LookRotation(Transform character, Transform camera)
{
     float yRot = CrossPlatformInputManager.GetAxis("Mouse X") * XSensitivity;
     float xRot = CrossPlatformInputManager.GetAxis("Mouse Y") * YSensitivity;

        m_CharacterTargetRot *= Quaternion.Euler(0f, yRot, 0f);
        m_CameraTargetRot *= Quaternion.Euler(-xRot, 0f, 0f);

        if (ORPargaModification)
        {
            if(Input.GetKeyDown(KeyCode.U))
            {
                Debug.Log("U pressed");
                m_CharacterTargetRot *= Quaternion.Euler(0f, 180, 0f);
            }
            character.localRotation = m_CharacterTargetRot;
            camera.localRotation = m_CameraTargetRot;

        }
        else
        {
            if (clampVerticalRotation)
            m_CameraTargetRot = ClampRotationAroundXAxis(m_CameraTargetRot);

            if (smooth)
            {
                character.localRotation = Quaternion.Slerp(character.localRotation, m_CharacterTargetRot,
                    smoothTime * Time.deltaTime);
                camera.localRotation = Quaternion.Slerp(camera.localRotation, m_CameraTargetRot,
                    smoothTime * Time.deltaTime);
            }
            else
            {
                character.localRotation = m_CharacterTargetRot;
                camera.localRotation = m_CameraTargetRot;
            }

        }

        UpdateCursorLock();
    }