实现从A到B的平滑视角切换(第三人称视角 和 射击视角 的切换)
public class PlayerShooting : MonoBehaviour
{
private float CD = 0.5f;
private float atTime = 0; // 将要到达的时间
Animator animator;
GameObject m_camera; // 主相机的位置角度
GameObject s_camera; // 枪视角相机的位置角度
GameObject pre_came; // 之前的相机位置角度
GameObject gun;
// Use this for initialization
void Awake()
{
animator = GetComponent<Animator>();
m_camera = GameObject.Find("Main Camera");
pre_came = GameObject.Find("Pre Camera");
GameObject root = GameObject.Find("Female");
s_camera = root.transform.Find("Shoot Camera").gameObject;
gun = GameObject.FindGameObjectWithTag("Gun");
}
// Update is called once per frame
void Update()
{
// 按下开火键
if (Input.GetKey(KeyCode.F) && Time.time > atTime)
{
atTime = Time.time + CD;
animator.SetBool("GunIdle", !GameManager.instance.isFireMode);
GameManager.instance.isFireMode = !GameManager.instance.isFireMode;
}
// 移动摄像机 (平滑移动的关键 Vector3.MoveTowards Quaternion.Slerp)
if (GameManager.instance.isFireMode)
{
Vector3 targetCamPos = s_camera.transform.position;
Quaternion targetCamRot = s_camera.transform.rotation;
//m_camera.transform.position = targetCamPos;
float step = 5 * Time.deltaTime;
m_camera.transform.position = Vector3.MoveTowards(m_camera.transform.position, targetCamPos, step);
m_camera.transform.rotation = Quaternion.Slerp(m_camera.transform.rotation, targetCamRot, step);
}
else
{
Vector3 targetCamPos = pre_came.transform.position;
Quaternion targetCamRot = pre_came.transform.rotation;
float step = 5 * Time.deltaTime;
m_camera.transform.position = Vector3.MoveTowards(m_camera.transform.position, targetCamPos, step);
m_camera.transform.rotation = Quaternion.Slerp(m_camera.transform.rotation, targetCamRot, step);
}
}
}