Unity攝像機(jī)跟隨的幾種方案

我最喜歡的一個(gè)字是吃,兩個(gè)字是旅行,三個(gè)字是你的名字.
Unity攤

晚上好, 接下來給大家分享攝像機(jī)的幾種跟隨方案.

方案1

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour
{
    //跟隨目標(biāo)
    public Transform mFollower;
    //相機(jī)的高度
    public float offsetY;

    //攝像機(jī)移動(dòng)處理一般放在LateUpdate
    void LateUpdate ()
    {
        if (mFollower != null) {
            Vector3 targetPoint = mFollower.position;
            targetPoint.y += offsetY;
            targetPoint.z -= 7f;
            transform.position = Vector3.Lerp (transform.position, targetPoint, Time.deltaTime * 5f);
        }
    }
}

方案2

public class FollowPlayer : MonoBehaviour
{
    //玩家
    private Transform player;

    public float speed = 4.0f;

    void Start ()
    {
        player = GameObject.FindGameObjectWithTag (Tags.player).transform;  
    }

    void Update ()
    {
        //攝像機(jī)跟隨
        Vector3 targetPos = player.position + new Vector3 (0, 2.0f, -2.7f);
        transform.position = Vector3.Slerp (transform.position, targetPos, speed * Time.deltaTime);
        Quaternion targetRotation = Quaternion.LookRotation (player.position - transform.position);
        transform.rotation = Quaternion.Slerp (transform.rotation, targetRotation, speed * Time.deltaTime);
    }
}

方案3

public class CameraScript : MonoBehaviour
{
        //攝像機(jī)跟離角色有多遠(yuǎn)
        public float distanceAway;
        //攝像機(jī)在角色上方多高
        public float distanceUp;
        //攝像機(jī)移動(dòng)的速度
        public float smooth;
        //目標(biāo)位置
        private Vector3 targetPosition;

        //攝像機(jī)所跟隨的對(duì)象的位置,此處是角色物體的位置
        Transform follow;
        // Use this for initialization
        void Start ()
        {
                //得到要跟隨的物體對(duì)象的位置
                follow = GameObject.FindGameObjectWithTag ("Player").transform;
        }

        // Update is called once per frame
        void Update ()
        {
                //得到攝像機(jī)要移動(dòng)的目標(biāo)位置
                targetPosition = follow.position + Vector3.up * distanceUp -follow.forward * distanceAway;
                //攝像機(jī)從當(dāng)前位置移動(dòng)到目標(biāo)位置
                transform.position = Vector3.Lerp (transform.position, targetPosition, Time.deltaTime * smooth);
                //攝像機(jī)要看向角色物體
                transform.LookAt (follow);
        }
}

方案4

攝像機(jī)隨鼠標(biāo)旋轉(zhuǎn)并且限制角度
public class CubeScript : MonoBehaviour
{
     float ver;
     // 限制角度
     float fv = 20;

     Quaternion last;

     void Update ()
     {
          ver = Input.GetAxis ("Mouse Y");    

          float angle = Vector3.Angle (Vector3.up, transform.forward);

          if (angle > 90 + fv || angle < 90 - fv) {
               transform.rotation = last;
          } else {
               last = transform.rotation;
               Vector3 tmp = new Vector3 (transform.eulerAngles.x - ver * Time.deltaTime * 60f,
                                  transform.eulerAngles.y,
                                  transform.eulerAngles.z);
               transform.eulerAngles = tmp;
          }
     }
}

代碼比較簡(jiǎn)單不在解釋, 如有疑問請(qǐng)留言.
另外再分享一個(gè)
[仿魔獸世界視角的Demo](https://pan.baidu.com/s/1jI2YI14)
密碼: jt9s

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,171評(píng)論 25 708
  • 從今天開始做一個(gè)快看簡(jiǎn)單的傻子
    貝貝杰閱讀 199評(píng)論 0 0
  • 今天已經(jīng)周日了,昨晚翻了一下周計(jì)劃,沒有可以一早上就可以寫完的主題了,突然就想起了這個(gè)題目。同樣的事情高中的時(shí)候也...
    littletree閱讀 287評(píng)論 0 2
  • 想了許久,卻一直想不到真正可以洗腦自己的生活方式。我用過多方法,各種各樣的都有 可以說是數(shù)不勝數(shù),但這些方法都依...
    一枝花的故事閱讀 407評(píng)論 0 0
  • 北京新城閱讀 181評(píng)論 0 3

友情鏈接更多精彩內(nèi)容