相机从任意位置进入到角色模型LookAt模式,相机的移动方式
根据目标模型旋转角度,确定相机最终旋转角度,插值改变相机角度
确定相机最终距离目标点距离
插值改变距离和角度
public class TestMove : MonoBehaviour
{
public GameObject targetObj;
private WaitForEndOfFrame m_EndofFrame = new WaitForEndOfFrame();
// Start is called before the first frame update
void Start()
{
StartCoroutine(moveCamera());
}
// Update is called once per frame
void Update()
{
Vector3 direction = new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));
Camera.main.transform.position += Camera.main.transform.rotation * direction * 5;
}
private IEnumerator moveCamera()
{
float beginTime = Time.time;
Quaternion startRotation = Camera.main.transform.rotation;
float yawData = targetObj.transform.eulerAngles.y + 180;
Quaternion endRotation = Quaternion.Euler(20,yawData,0);
float startDis = Vector3.Distance(Camera.main.transform.position, targetObj.transform.position);
float endDis = 5;
float animTime = 3;
Vector3 currentPos;
while (true)
{
float timeSinceBegin = Time.time - beginTime;
if (timeSinceBegin>animTime)
{
break;
}
float t = timeSinceBegin / animTime;
float currentDis = Mathf.Lerp(startDis, endDis, t);
Camera.main.transform.rotation = Quaternion.Slerp(startRotation,endRotation,t);
currentPos = targetObj.transform.position - Camera.main.transform.rotation * Vector3.forward * currentDis;
Camera.main.transform.position = currentPos;
yield return m_EndofFrame;
}
}
}
关键点:!!
currentPos = targetObj.transform.position - Camera.main.transform.rotation * Vector3.forward * currentDis;
相机拉近拉远,只需要改变相机前后移动
相机绕目标点旋转,则是改变相机旋转角度,当与目标点距离保持不变的情况下,可以根据上述代码实现相机绕目标点旋转