Unity腳本:GetAxis
- 詳細內容
- 分類:Unity
- 發佈:2014-05-07, 週三 11:26
- 點擊數:3083
GetAxis:
Input.GetAxis與GetButton以及GetKey有著相似的運作方式,
但也有一些基礎上的不同。
GetKey 與 GetButton 傳回布林值,
按鈕也只有壓下或者釋放兩種狀態。
而GetAxis 則傳回介於-1到1之間的浮點數。
我們可以在輸入管理器中設定軸的相關參數。
輸入管理器的開啟方法為:
Edit -> Project Settings -> Input
對於GetKey 與 GetButton來說,只需要設定positiv按鈕即可,
但對於Input.GetAxis來說,需要再設定一個negative按鈕,
還有gravity, sensitivity, dead 以及snap。
(圖中的left代表這左箭頭,以及a鍵,right代表右鍵頭以及d鍵)
當按下positiv按鈕時,傳回的浮點數會往+1慢慢移動。
當按下negative按鈕時,傳回的浮點數會往-1慢慢移動。
gravity代表的是放開按鈕時,傳回的浮點數往0移動的速度。
sensitivity代表的是按下按鈕時,傳回的浮點數增加或減少的速度。
如果我們用搖桿來代表我們的軸的話,
那我們其實不需要去偵測太過細微的搖桿的晃動,
所以我們可以使用dead 參數來避免這點,
dead 參數越大,則搖桿需要移動越大的距離才能開始返回非零值。
例外關於snap選項,
根據實驗的結果,positive 與 negative按鈕同時按下時,GetAxis的返回值會停止不動,
而snap選項勾選時,放開原本方向的按鍵,會迅速歸零後再往另一方向移動,
而snap選項未勾選時,則會滑順的往另一方向移動。
有趣的是,在歸零前的移動速度,似乎是gravity與sensitivity中較大者來決定。
另外,還可以使用GetAxisRaw,讓返回值只有整數值,也就是-1、0、+1。
這很適用於需要精準控制而非平滑效果的2D遊戲,
當然這種情況下,並不需要設置gravity與sensitivity。
要注意的是:
不要被Horizontal這字眼給迷惑了,這只是軸的名字。
你依然可以用上下鍵來控制Horizontal軸的返回值,
也可以用Input.GetAxis("Horizontal")的返回值來控制 X, Y, Z軸的位置,或是其他...
譬如說旋轉之類的。
輸入控制器中所謂的軸,似乎沒有實質上座標系統上的意義。
當然命名是為了更好區分,
因此把nput.GetAxis("Horizontal")的返回值套用在垂直方向的移動並沒有太大意義。
另外,測試了一下,unity的輸入控制器可以設定多組自訂軸,
實際上限並不清楚,不過應該不少就是。
來自官網的簡單js範例:
AxisExample:
#pragma strict public var range : float; public var textOutput : GUIText; function Update () { var h : float = Input.GetAxis("Horizontal"); var xPos : float = h * range; transform.position = new Vector3(xPos, 2f, 0); textOutput.text = "Value Returned: "+h.ToString("F2"); }
AxisRawExample:
#pragma strict public var range : float; public var textOutput : GUIText; function Update () { var h : float = Input.GetAxisRaw("Horizontal"); var xPos : float = h * range; transform.position = new Vector3(xPos, 2f, 0); textOutput.text = "Value Returned: "+h.ToString("F2"); }
DualAxisExample:
#pragma strict public var range : float; public var textOutput : GUIText; function Update () { var h : float = Input.GetAxis("Horizontal"); var v : float = Input.GetAxis("Vertical"); var xPos : float = h * range; var yPos : float = v * range; transform.position = new Vector3(xPos, yPos, 0); textOutput.text = "Horizontal Value Returned: "+h.ToString("F2")+"\nVertical Value Returned: "+v.ToString("F2"); }
官網教學:
按個讚!~支持本站!~