unity戰棋方式移動?
unity 戰棋遊戲的關鍵之一,就是豬腳的移動方式,這篇簡單介紹一下在2D模式下如何實現豬腳的戰棋方式移動,2D和3D模式兩者模式其實都一樣。
以後會補充完善更多的內容。
注意這裡用到一個外掛:itween,它包含了很多模型移動動畫。
工具/原料
一臺電腦
unity4.0
方法/步驟
首先,構建場景,一張背景,一個豬腳。我們給背景新增一個元件“physics—box collider”。
注意是physics不是physics2d,至於為什麼下文會說明。
我們新建一個指令碼檔案,將它附給Main Camera,雙擊開啟指令碼我們進行編輯。
我們先將完成的指令碼貼下來:
我們想實現滑鼠點選,然後豬腳移動到相應位置,
那麼首先怎麼獲取滑鼠的位置呢,
Input.mousePosition可以獲取3D場景的座標,但在2D場景中,就會出問題,你會發現獲取的滑鼠的世界座標完全與2D場景不符,那怎麼辦呢?
用Ray ray = camera.ScreenPointToRay (Input.mousePosition)
我們傳送射線到世界座標系返回螢幕座標,這樣世界座標就轉化為螢幕座標。
因此如下:
Ray ray = camera.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
Physics.Raycast (ray, out hit);
我們傳送射線,Physics.Raycast返回射線碰撞到的物體。
注意:物體必須有collider才會被射線檢測到,但physics2D無法被檢測到,所以我們只能新增physics而不是physics2d。
但問題是我們要取得的是滑鼠點選位置的座標,而不是射線獲取的物體的座標,
所以我們用hit.point而不是hit.transfrom.position來得到座標點。
有座標了,怎麼實現移動呢?
如圖為我們的移動原理,所以我們
我們需要兩個座標:
Vector3[] Pos=new Vector3[2];
分別為:
Pos[0]= new Vector3(hit.point.x,player.transform.position.y,0);
Pos[1]= new Vector3(hit.point.x,hit.point.y,0);
為了實現移動,我們需要一個方法:
void move(){
if (point < 2) {
iTween.MoveTo(player,iTween.Hash("position",Pos[point],"speed",50f,"easeType","linear","oncomplete","move","oncompletetarget",gameObject));
point++;
}
}
這個比較長,iTween.MoveTo實現我提的移動,iTween.Hash中的數值意思為:按照速度為50,向pos[point]位置以“linear”方式移動,"oncomplete"移動完成後呼叫"move"方法。
但當我們移動到位置一pos[0]完成後,我們會重新呼叫move方法,再次進行移動,移動到pos[1]位置二。
那麼現在完成了,我們測試一下
這個指令碼對3d同樣適用,或者說效果更好:
這只是簡單的移動,以後會加入更多的內容,讓戰棋遊戲豐富起來