Unity3d場景漫遊---iTween實現

接觸U3D以來,我作過的場景漫遊實現方式通常有如下幾種:

  • Unity3d中的Animation組件,經過設置攝像機的關鍵點實現場景漫遊
  • 第一人稱或第三人稱控制器
  • 編寫攝像機控制腳本
  • iTween
iTween實現相對來講比較簡單,並且動畫效果很是好,所以是我作場景漫遊的首選,下面我來總結一下iTween作場景漫遊的具體實現

簡單作了個小demo如圖:函數

scene.png
我在場景中建了4個空物體做爲路徑點,攝像機從一個路徑點到下一個路徑點循環往復,當按下空格鍵後,漫遊會暫停,鬆開後繼續,代碼符合我一向的風格,註釋很詳細,我就很少解釋了.oop

涉及到的代碼綁在攝像機上面,以下:

using UnityEngine;
using System.Collections;

public class TweenRoam : MonoBehaviour
{

    public Transform[] paths;  //路徑尋路中的全部的關鍵點 使用空物體路徑點 
    //public Vector3[] paths;  //也可使用這句代碼直接給路徑點的位置賦值
    public Hashtable args;   //設置路徑鍵值對
    public float m_speed = 10f;  //漫遊的速度
    public bool isMove = true;  //是否漫遊
    
    void Start()
    {
        args = new Hashtable();

        args.Add("path", paths);  //設置路徑的點  

        args.Add("easeType", iTween.EaseType.linear);  //設置類型爲線性,線性效果會好一些。  

        args.Add("speed", m_speed);  //設置尋路的速度  

        args.Add("movetopath", false);   //是否先從原始位置走到路徑中第一個點的位置  

        args.Add("orienttopath", true);//是否讓模型始終面朝當面目標的方向,拐彎的地方會自動旋轉模型,若是你發現你的模型在尋路的時候始終都是一個方向那麼必定要打開這個  

        args.Add("looktarget", Vector3.zero);   //移動過程當中面朝一個點  

        args.Add("loopType", "loop");   //三個循環類型 none loop pingpong(通常 循環 來回)  

        args.Add("NamedValueColor", "_SpecColor");  //這個是處理顏色的。能夠看源碼的那個枚舉。  

        args.Add("delay", 0f);   //延遲執行時間  

        iTween.MoveTo(gameObject, args);   //讓模型開始尋路  這個方法和放在Update函數裏的MoveUpdate()方法效果同樣  Update裏爲了控制是否移動    
    }

    void Update()
    {
       RoamControl();
    }

    /// <summary>
    /// 控制動畫暫停和繼續的函數
    /// </summary>
    void RoamControl()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            iTween.Pause();
        }
        if (Input.GetKeyUp(KeyCode.Space))
        {
            iTween.Resume();
        }
    }

    void OnDrawGizmos()
    {
        //在Scene視圖中繪製出路徑  
        iTween.DrawLine(paths, Color.yellow);
        iTween.DrawPath(paths, Color.red);
    }
}

Demo源碼地址: http://pan.baidu.com/s/1jIulQpo動畫

注意:代碼綁定到攝像機上後要給paths指定路徑,或者用vector那句直接賦值也能夠3d

關於iTween的其餘知識點

  • iTween.MoveTo(): 讓模型移動到一個位置,它的底層函數是經過動態的修改模型每一幀的transform.position完成的,因此它會百分之百到達目標點,不會出現偏差。code

  • iTween.MoveFrom():它和上面的同樣,iTween.MoveTo()是將模型移動到目標位置,而iTween.MoveFrom()是將模型從目標位置移動到原始位置。orm

  • iTween.MoveAdd() 和iTween.MoveBy()底層實現同樣,你們能夠去看源碼。處理移動時採用的是transform.Translate也就是API的平移,這樣在處理移動的時候可能會出現一些偏差,可是效果好點。blog

  • iTween.MoveUpdate():和iTween.MoveTo()差很少,只是它須要放在循環或者Update()中。
  • iTween.Pause(); 暫停
  • iTween.Resume();恢復get

相關文章
相關標籤/搜索