Unity3d場(chǎng)景漫游---iTween實(shí)現(xiàn)

接觸U3D以來(lái),我做過的場(chǎng)景漫游實(shí)現(xiàn)方式一般有以下幾種:

  • Unity3d中的Animation組件,通過設(shè)置攝像機(jī)的關(guān)鍵點(diǎn)實(shí)現(xiàn)場(chǎng)景漫游
  • 第一人稱或第三人稱控制器
  • 編寫攝像機(jī)控制腳本
  • iTween
iTween實(shí)現(xiàn)相對(duì)來(lái)說比較簡(jiǎn)單,而且動(dòng)畫效果非常好,因此是我做場(chǎng)景漫游的首選,下面我來(lái)總結(jié)一下iTween做場(chǎng)景漫游的具體實(shí)現(xiàn)

簡(jiǎn)單做了個(gè)小demo如圖:

scene.png

我在場(chǎng)景中建了4個(gè)空物體作為路徑點(diǎn),攝像機(jī)從一個(gè)路徑點(diǎn)到下一個(gè)路徑點(diǎn)循環(huán)往復(fù),當(dāng)按下空格鍵后,漫游會(huì)暫停,松開后繼續(xù),代碼符合我一貫的風(fēng)格,注釋很詳細(xì),我就不多解釋了.

涉及到的代碼綁在攝像機(jī)上面,如下:

using UnityEngine;
using System.Collections;

public class TweenRoam : MonoBehaviour
{

    public Transform[] paths;  //路徑尋路中的所有的關(guān)鍵點(diǎn) 使用空物體路徑點(diǎn) 
    //public Vector3[] paths;  //也可以使用這句代碼直接給路徑點(diǎn)的位置賦值
    public Hashtable args;   //設(shè)置路徑鍵值對(duì)
    public float m_speed = 10f;  //漫游的速度
    public bool isMove = true;  //是否漫游
    
    void Start()
    {
        args = new Hashtable();

        args.Add("path", paths);  //設(shè)置路徑的點(diǎn)  

        args.Add("easeType", iTween.EaseType.linear);  //設(shè)置類型為線性,線性效果會(huì)好一些馋辈。  

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

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

        args.Add("orienttopath", true);//是否讓模型始終面朝當(dāng)面目標(biāo)的方向,拐彎的地方會(huì)自動(dòng)旋轉(zhuǎn)模型,如果你發(fā)現(xiàn)你的模型在尋路的時(shí)候始終都是一個(gè)方向那么一定要打開這個(gè)  

        args.Add("looktarget", Vector3.zero);   //移動(dòng)過程中面朝一個(gè)點(diǎn)  

        args.Add("loopType", "loop");   //三個(gè)循環(huán)類型 none loop pingpong(一般 循環(huán) 來(lái)回)  

        args.Add("NamedValueColor", "_SpecColor");  //這個(gè)是處理顏色的叉抡〈鸷粒可以看源碼的那個(gè)枚舉褥民。  

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

        iTween.MoveTo(gameObject, args);   //讓模型開始尋路  這個(gè)方法和放在Update函數(shù)里的MoveUpdate()方法效果一樣  Update里為了控制是否移動(dòng)    
    }

    void Update()
    {
       RoamControl();
    }

    /// <summary>
    /// 控制動(dòng)畫暫停和繼續(xù)的函數(shù)
    /// </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

注意:代碼綁定到攝像機(jī)上后要給paths指定路徑,或者用vector那句直接賦值也可以

關(guān)于iTween的其他知識(shí)點(diǎn)

  • iTween.MoveTo(): 讓模型移動(dòng)到一個(gè)位置轴捎,它的底層函數(shù)是通過動(dòng)態(tài)的修改模型每一幀的transform.position完成的,所以它會(huì)百分之百到達(dá)目標(biāo)點(diǎn)侦副,不會(huì)出現(xiàn)誤差。

  • iTween.MoveFrom():它和上面的一樣秦驯,iTween.MoveTo()是將模型移動(dòng)到目標(biāo)位置,而iTween.MoveFrom()是將模型從目標(biāo)位置移動(dòng)到原始位置译隘。

  • iTween.MoveAdd() 和iTween.MoveBy()底層實(shí)現(xiàn)一樣洛心,大家可以去看源碼固耘。處理移動(dòng)時(shí)采用的是transform.Translate也就是API的平移词身,這樣在處理移動(dòng)的時(shí)候可能會(huì)出現(xiàn)一些誤差,但是效果好點(diǎn)。

  • iTween.MoveUpdate():和iTween.MoveTo()差不多葫笼,只是它需要放在循環(huán)或者Update()中拗馒。

  • iTween.Pause(); 暫停

  • iTween.Resume();恢復(fù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诱桂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挥等,老刑警劉巖触菜,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涡相,死亡現(xiàn)場(chǎng)離奇詭異剩蟀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丙号,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門犬缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棉浸,“玉大人,你說我怎么就攤上這事枝恋∥撕Γ” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我朗徊,道長(zhǎng)偎漫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮杯矩,結(jié)果婚禮上史隆,老公的妹妹穿的比我還像新娘。我一直安慰自己粘姜,他們只是感情好熔酷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布拒秘。 她就那樣靜靜地躺著,像睡著了一般押蚤。 火紅的嫁衣襯著肌膚如雪羹应。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天钾菊,我揣著相機(jī)與錄音煞烫,去河邊找鬼累颂。 笑死凛俱,一個(gè)胖子當(dāng)著我的面吹牛料饥,可吹牛的內(nèi)容都是我干的岸啡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奋隶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悦荒!你這毒婦竟也來(lái)了唯欣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搬味,失蹤者是張志新(化名)和其女友劉穎境氢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碰纬,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萍聊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘀趟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脐区。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愈诚,死狀恐怖她按,靈堂內(nèi)的尸體忽然破棺而出炕柔,到底是詐尸還是另有隱情酌泰,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布匕累,位于F島的核電站陵刹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏欢嘿。R本人自食惡果不足惜衰琐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炼蹦。 院中可真熱鬧羡宙,春花似錦、人聲如沸掐隐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匿刮,卻和暖如春僧凰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熟丸。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工训措, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人光羞。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓隙弛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狞山。 傳聞我的和親對(duì)象是個(gè)殘疾皇子全闷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容