我正在开发我的第一个游戏,所以对Unity来说有点新鲜。所以我的问题是我试图通过按下按钮来旋转Fps控制器以面向目标。我设法通过将此代码附加到它来单独旋转相机,但只有相机旋转所以它完全弄乱了行走
public class PlayerRotate : MonoBehaviour {
public Transform target;
void Update(){
if(Input.GetKeyDown("r")){
print ("Rotate");
transform.LookAt(target.position);
}
}
}
我也尝试将相同的脚本附加到Fps控制器,但没有任何反应。非常感谢任何人的帮助,谢谢。
答案 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();
}