unity戰棋方式移動?

Tags: 戰棋,

unity 戰棋遊戲的關鍵之一,就是豬腳的移動方式,這篇簡單介紹一下在2D模式下如何實現豬腳的戰棋方式移動,2D和3D模式兩者模式其實都一樣。

以後會補充完善更多的內容。

注意這裡用到一個外掛:itween,它包含了很多模型移動動畫。

工具/原料

一臺電腦

unity4.0

方法/步驟

首先,構建場景,一張背景,一個豬腳。我們給背景新增一個元件“physics—box collider”。

注意是physics不是physics2d,至於為什麼下文會說明。

unity戰棋方式移動

unity戰棋方式移動

unity戰棋方式移動

我們新建一個指令碼檔案,將它附給Main Camera,雙擊開啟指令碼我們進行編輯。

unity戰棋方式移動

我們先將完成的指令碼貼下來:

unity戰棋方式移動

我們想實現滑鼠點選,然後豬腳移動到相應位置,

那麼首先怎麼獲取滑鼠的位置呢,

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);

unity戰棋方式移動

為了實現移動,我們需要一個方法:

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同樣適用,或者說效果更好:

這只是簡單的移動,以後會加入更多的內容,讓戰棋遊戲豐富起來

unity戰棋方式移動

unity戰棋方式移動

相關問題答案