生活随笔
收集整理的這篇文章主要介紹了
Unity3D游戏开发之仿仙剑奇侠传仙灵岛机关的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? 我們繼續來做點和仙劍相關的東西,首先我們來看一副圖:
? ? ? ? ?這幅圖呢,是仙劍奇俠傳的第一個迷宮場景——仙靈島的蓮花池。男主角李逍遙為替嬸嬸求藥獨闖仙靈島,在經歷了前面的小草妖戰斗后,李逍遙就來到了 蓮花池,這個迷宮的解法很簡單,乘坐蓮花池中的蘆葦墊到不同的地方,然后用破天錘打碎五座阿修羅像,通往仙靈島的通路就會被打開,就是在仙靈島李逍遙邂逅了正在沐浴的趙靈兒,仙劍奇俠傳的故事從此展開。好了,故事先說到這里,我們來看這里很重要的一個信息:李逍遙踩著蘆葦墊到達不同的地方,然后用破天錘打碎石像開啟機關。我們把最終要的東西提取出來的話就是我們可以踩著蘆葦墊子到不同的地方去。好,我們今天就來實現一個簡化的"仙靈島"吧!那么怎么做呢?在這篇文章中,我們最終實現的效果是這樣的:
? ? ? ? 現在呢,讓我們把蓮花池里的構件做一下抽象:每一個?石柱可以看做是一個尋路節點,蘆葦墊子可以看做是綁定了尋路組件的一個GameObject。唯一的區別就在于這里的蘆葦墊子是需要我們的角色站在上面才能讓它運動的,而我們在這篇文章里的游戲體是自己運動的。好,現在我們開始來實現這個功能吧。我們先創建如下圖所示的場景:
? ? ? ?我們在水中布置了8個石柱,兩個蘆葦墊子,當游戲開始時,玩家控制角色走上蘆葦墊子時,蘆葦墊子將按照事先設定的路線,將角色送達最后一個石柱位置,此時,玩家可以控制角色到達對岸。當玩家再次踏上蘆葦墊子時,蘆葦墊子會將角色送回起點位置。當蘆葦墊子處于移動狀態中時,角色可以向四個方向旋轉,活動范圍僅限于蘆葦墊子上。好,交待清楚了場景,我們下面來講解原理:
? ? ? ?1、角色控制
? ? ? ? ? ? ?采用在游戲開發之仿仙劍奇俠傳角色控制效果》中實現的角色控制器來控制角色的行為。
? ? ? ?2、尋路的實現
? ? ? ? ? ? ?采用在游戲開發之基于ITween實現尋路功能》中實現的尋路組件作為基礎腳本,本節在此基礎上做擴充和完善,保證角色可以自由的移動
? ? ? ?基于以上兩個原理,我們下面來編寫今天的腳本:
[csharp]?view plaincopyprint?
using?UnityEngine;??using?System.Collections;????public?class?TransportScript?:?MonoBehaviour?{??????????????????public?Transform[]?mPaths;????????????private?Transform?mTransportor;????????????public?Transform?mTransportPlayer;??????????????????Vector3?StartPoint=new?Vector3(0F,0.5F,-13F);????????????Vector3?EndPoint=new?Vector3(0F,0.5F,10F);??????????????????private?int?MoveType=0;????????????private?bool?isMoving=false;??????????????????private?Hashtable?args=new?Hashtable();????????????void?Start?()???????{????????????????????mTransportor=this.transform;??????????????????????Hashtable?args?=?new?Hashtable();????????????????????args.Add("path",mPaths);????????????????????args.Add("easeType",?iTween.EaseType.linear);????????????????????args.Add("speed",2.5f);????????????????????args.Add("time",10f);????????????????????args.Add("movetopath",true);????????????????????args.Add("delay",?0.1f);????????????????????args.Add("looktarget",Vector3.up);????????????????????args.Add("loopType",?"pingPong");??????????????????????????????args.Add("orienttopath",true);????????????????iTween.MoveTo(gameObject,args);??????????iTween.Pause();??????}????????????void??Update()??????{??????????????????if(isMoving==false)?????????{????????????iTween.Pause();?????????}????????????????????if(MoveType==0?&&?mTransportor.position!=EndPoint?&&?isMoving==true)?????????{????????????????????????mTransportPlayer.position=mTransportor.position;?????????}else?if(MoveType==0?&&?mTransportor.position==EndPoint)?????????{????????????????????????iTween.Pause();????????????isMoving=false;????????????MoveType=1;?????????}????????????????????????????if(MoveType==1?&&?mTransportor.position!=StartPoint?&&?isMoving==true)?????????{????????????????????????mTransportPlayer.position=mTransportor.position;?????????}else?if(MoveType==1?&&?mTransportor.position==StartPoint)?????????{????????????????????????iTween.Pause();????????????isMoving=false;????????????MoveType=0;?????????}???????????????}??????????????????void?OnTriggerEnter(Collider?mCollider)??????{??????????if(mCollider.gameObject.name=="Samuzai")??????????{??????????????????????????if(isMoving==false)?????????????{????????????????isMoving=true;????????????????iTween.Resume();?????????????}??????????}??????}??}??
? ? ? ? 在上面的代碼中,我們需要把握以下幾點:
? ? ? ? 1、在Start()方法中,我們主要完成的是尋路組件的初始化,這里我們將尋路動畫設置為來回,然后通過Pause()、Resume()方法兩個方法來控制動畫的播放,因為iTween沒有提供在Update()中實現動畫播放的方法,iTween只支持部分方法在Update()方法中使用,具體的大家可以自己去了解iTween的API文檔。
? ? ? ? 2、我們主要通過isMoving標志來標記當前的狀態,使用OnTriggerEnter()方法來判斷角色是否走上了蘆葦墊子,當角色走上蘆葦墊子上時,就開始播放尋路動畫。當到達起點/終點時,尋路動畫即停止。當角色再次走上蘆葦墊子時,再次開始尋路動畫。
? ? ? ?3、我們再Update()方法中通過改變角色的位置實現了角色和蘆葦墊子的同步移動,當到達起點/終點時,尋路動畫即停止,直到下一次被觸發。
? ? ? ?4、觸發與碰撞的區別在于觸發不會產生力的作用,可以通過OnTriggerEnter/OnTriggerStay/OnTriggerExit方法分別監聽觸發開始、觸發中、觸發結束。要使用Trigger需要勾選碰撞器的isTrigger選項。具體的區別我會在后面的文章中為大家做講解。
? ? ? 更多精彩請點擊 ?www.gopedu.com
? ? ? ?這篇文章中用到的東西就是這么多,主要的難點是尋路動畫的控制,由于官方沒有提供有關的方法,所以我們只能采用Pause()、Resume()方法來控制角色的動畫。最后我們來一起看看實現的效果吧,是不是有仙靈到的感覺呢?呵呵
??? ??
總結
以上是生活随笔為你收集整理的Unity3D游戏开发之仿仙剑奇侠传仙灵岛机关的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。