Unity腳本:GetAxis

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

官網教學:

 
 

  按個讚!~支持本站!~

FB推薦載入中