我的猜测是你找的Transform.localEulerAngles
(你可以找到更多关于它here)。我会做你的情况是让你不想在这个其他移动和使用球面线性插值的轴(S):
Vector3 currentLocalEulerAngles = transform.localEulerAngles;
Vector3 targetLocalEulerAngles = /*What you want*/ Vector3.zero;
float slerpSpeed;
transform.localEulerAngles = Vector3.Slerp(transform.localEulerAngles, new Vector3(currentLocalEulerAngles.x, targetLocalEulerAngles.y, targetLocalEulerAngles.z), slerpSpeed * Time.deltaTime);
编辑:要清楚,我建议做有事情的这种方式记住在这种情况下,相机经常被放置为的GameObject位于的玩家。这样,你只需要旋转什么可以称为CameraHolder:球员(做你想要什么)>CameraHolder(沿着局部轴旋转)>相机(固定或得到振荡或者你想要的):)
EDIT2:这里有一个小脚本,将你在寻找什么(希望):你只需要设置你的相机为您球员的孩子,把它,所以它“看起来”你球员与理想的距离/角度,最后加入这个CameraHolder脚本您相机。
using UnityEngine;
[RequireComponent(typeof(Camera))]
public class CameraHolder : MonoBehaviour
{
[Range(0.0f, 10.0f)]
[SerializeField]
private float m_CameraResetSpeed = 4.0f;
[Range(0.0f, 10.0f)]
[SerializeField]
private float m_MinAngleToStopReseting = 2.0f;
private Transform m_CameraHolderTransform;
private Vector3 m_CameraHolderWorldEulerAngles;
private bool m_ResetingCamera;
void Start()
{
GameObject cameraHolder = new GameObject("CameraHolder");
m_CameraHolderTransform = cameraHolder.transform;
m_CameraHolderTransform.SetParent(transform.parent);
m_CameraHolderTransform.localPosition = Vector3.zero;
m_CameraHolderTransform.localRotation = Quaternion.identity;
m_CameraHolderTransform.localScale = Vector3.one;
transform.SetParent(cameraHolder.transform);
m_CameraHolderWorldEulerAngles = m_CameraHolderTransform.eulerAngles;
m_ResetingCamera = false;
}
void LateUpdate()
{
if(m_ResetingCamera)
{
m_CameraHolderTransform.localEulerAngles = new Vector3(0.0f,
Mathf.LerpAngle(m_CameraHolderTransform.localEulerAngles.y, 0.0f, m_CameraResetSpeed * Time.deltaTime), 0.0f);
if(Mathf.Abs(m_CameraHolderTransform.localEulerAngles.y) < m_MinAngleToStopReseting)
{
Debug.Log("Reset done...");
m_ResetingCamera = false;
m_CameraHolderWorldEulerAngles = m_CameraHolderTransform.eulerAngles;
}
}
else
{
m_CameraHolderTransform.eulerAngles = m_CameraHolderWorldEulerAngles;
}
}
public void ResetCamera()
{
Debug.Log("Reseting camera...");
m_ResetingCamera = true;
}
}
我怀疑你可能已经在这错估了OP的意图 - 它听起来像愿望是旋转的摄像头周围的点(玩家位置),而不是仅仅在原地绕自身轴线。 – Serlite
@Serlite你指出了我忘了添加到我的答案...(在我的脑海里,它非常清楚,但我忘了添加它)。我会编辑我的答案。 – Kardux
@Kardux我想要的行为就是:[demo gif](http://gph.is/2gVkmZe)。只有在xz计划中,相机在相机周围的平稳旋转才能将相机重置在后面。 –