unity学习:控制人物的移动
目錄
一、導(dǎo)入
代碼
代碼使用分析
?二、使用Input.GetKey來獲取鍵盤中按下的鍵
代碼?
代碼使用分析
三、獲取水平輸入與豎直輸入
代碼?
代碼使用分析
四、幀為參照改為秒為參照
代碼?
代碼使用分析
先解釋一下代碼中會出現(xiàn)的speed:
public float speed = 0.1f;一、導(dǎo)入
首先我們來試試僅僅讓人物無條件開始移動,不用鍵盤加以控制
代碼
void Update(){//創(chuàng)建一個Vector2對象position,用來獲取當前對象的位置Vector2 position = transform.position;//更改position的x坐標值,讓其加上0.1position.x += speed;transform.position = position; }以上代碼的效果是人游戲?qū)ο笠悦繋?.1米的速度無條件向右移動,當游戲開始運行,此游戲?qū)ο罅⒓聪蛴乙苿?#xff0c;移動快慢取決于各位的電腦。
代碼使用分析
(1)Vector2 二維向量:
在 Unity 中,Transform 值使用 x 表示水平位置,使用 y 表示垂直位置,使用 z 表示深度。這 3 個數(shù)值組成一個坐標。由于此游戲是 2D 游戲,你無需存儲 z 軸位置,因此你可以在此處使用 Vector2 來僅存儲 x 和 y 位置。
另外,Transform 中 position 的類型,也是 Vector2。
(2)transform:
可以暫時理解為代指當前游戲?qū)ο蟆?/p>
二、使用Input.GetKey來獲取鍵盤中按下的鍵
用wsda移動,用nput.GetKey獲取按鍵
代碼?
void Update(){?//獲取當前位置Vector2 position = transform.position;if(Input.GetKey("d")){position.x += speed;}if (Input.GetKey("a")){position.x -= speed;}if (Input.GetKey("w")){position.y += speed;}if (Input.GetKey("s")){position.y -= speed;}transform.position = position; }代碼使用分析
(1)Input類:
使用該類來讀取傳統(tǒng)游戲輸入中設(shè)置的軸/鼠標/按鍵,以及訪問移動設(shè)備上的多點觸控/加速度計數(shù)據(jù)。若要使用輸入來進行任何類型的移動行為,請使用 Input.GetAxis。
三、獲取水平輸入與豎直輸入
用Horizontal與Vertical來獲取水平輸入與豎直輸入
代碼?
void Update(){//獲取水平輸入,按向左,會獲得-1.0f;按向右,會獲得0.1ffloat horizontal = Input.GetAxis("Horizontal");//獲取垂直輸入,按向下,會獲得-1.0f;按向右,會獲得0.1ffloat vertical = Input.GetAxis("Vertical");//獲取當前對象位置Vector2 position = transform.position;//更改位置position.x += speed * horizontal;position.y += speed * vertical;//新位置transform.position = position; }代碼使用分析
(1)Horizontal與Vertical:
在 Unity 項目設(shè)置中,可以通過 Input Manager 進行默認的游戲輸入控制設(shè)置
Edit > Project Settings > Input
鍵盤按鍵,以 2 個鍵來定義軸:
負值鍵 negative button,被按下時將軸設(shè)置為 -1
正值鍵 positive button ,被按下時將軸設(shè)置為 1
Horizontal : 水平軸 對應(yīng) X 軸
Vertical :縱軸 對應(yīng) Y 軸
?等一下,是否發(fā)現(xiàn)上面代碼運行起來之后人物的移動會特別快(尤其是那些電腦好的家伙),因為上面的速度單位是:米/幀,所以不同電腦會有不同的移動效果,下面我們將其單位改為:米/秒。
四、幀為參照改為秒為參照
Time.deltaTime出場
代碼?
void Update(){//獲取水平輸入,按向左,會獲得-1.0f;按向右,會獲得0.1ffloat horizontal = Input.GetAxis("Horizontal");//獲取垂直輸入,按向下,會獲得-1.0f;按向右,會獲得0.1ffloat vertical = Input.GetAxis("Vertical");//獲取當前對象位置Vector2 position = transform.position;//更改位置//將每幀每米變成每秒每米position.x += speed * horizontal * Time.deltaTime;position.y += speed * vertical * Time.deltaTime;//新位置transform.position = position; }代碼使用分析
Time.deltaTime:
是每幀的時間間隔,float 類型。
一般將這個值,用在 Update 方法中,乘以移動的距離(或角度),用來獲取恒定(不同硬件水平的電腦間)的速度。
unity官方文檔:
https://docs.unity3d.com/ScriptReference/Time-deltaTime.htmlhttps://docs.unity3d.com/ScriptReference/Time-deltaTime.html
好啦,這就是這次學(xué)習(xí)的小小總結(jié)!?
總結(jié)
以上是生活随笔為你收集整理的unity学习:控制人物的移动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三维点云学习(6)7-3D Object
- 下一篇: python画圣诞树【方块圣诞树、线条圣