unity3d 平滑切换视角

实现从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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值