unity中的輸入事件有兩種,一種是全域性觸發,在每一幀的更新時都要進行判斷,另一種是監聽式觸發,監聽某個觸發條件從而執行之後的邏輯。全域性輸入適用於人物控制,移動等事件的使用。需要用到input類,它可以監聽鍵盤,滑鼠,手柄,以及移動裝置上的touch事件。由於全域性輸入沒有提供觸發事件,需要在update中通過每一幀的更新去判斷是否執行。
1、input類中的getkey方法有三種:getkey()、getkeydown()和getkeyup()。引數型別為keycode,例如input.getkey(keycode.w)
區別:getkey會不斷監聽鍵盤操作並執行後續邏輯,getkeydown只監聽按下按鍵的一次動作,getkeyup只監聽按鍵鬆開的一次動作。
void update ()
if(input.getkey(keycode.d))
if (input.getkeydown(keycode.s))
if (input.getkey(keycode.a))
}
2、unity定義了一下中常用的組合鍵,這些鍵可以在editor—>project setting—>input中進行管理。
我們可以通過使用input.getaxis("組合鍵名")函式來獲取事先設定的組合鍵的值。
private float h = 0.0f;
private float v = 0.0f;
void update()
例如:input.getaxis("horizontal")函式,horizontal的預設按鍵是a,d或left,right。該方法的返回值介於-1和1之間。
若對鍵盤控制時效性要求較高,可以使用input.getaxisraw("horizontal")函式,該函式僅返回-1、0、1三個值。
3、自定義button類實現輸入事件
定義乙個mybuton類
public class mybutton
else
}//這一輪的當前按鈕狀態為下一輪判斷的前次狀態
laststate = curstate; }}
mybutton類應該具備按鈕的三種狀態:ispressing,onpressed,onreleased,宣告乙個tick(bool input)函式,引數是乙個表示按鍵是否按下的布林值。當input=true時,表示按鈕正在按下,即ispressing=true。而為了表達「剛剛按下」——onpressed狀態和「剛剛釋放」——onreleased狀態,則需要引入兩個狀態值標記當前狀態curstate和前次狀態laststate。前次狀態和當前狀態不相等時,表示按鈕進行過按壓或釋放操作,當curstate = true;laststate = false;時表示按鈕進行過按壓操作,當curstate = false;laststate = true;則表示按鈕進行過釋放操作。本輪判斷結束前,把curstate值賦給laststate,進行下一輪的判斷。 unity人物移動
建議使用以下做法 給人物加character controller,然後在指令碼中獲取人物的角色控制器 charactercontroller character fighter.getcomponent fighter是人物對應的gameobject物件 然後利用character移動,例如控制角...
unity實現手機端搖桿控制人物移動
前言 玩過王者榮耀或者荒野行動的人,都知道,手機左下方或右下方都會有乙個搖桿,滑動搖桿可以讓人物向360度方向移動。沒有玩過的可以看看下方 荒野行動手機端為例 本篇就來講解如何使用unity製作搖桿控制人物移動。2種方法 1.guitexture製作,是unity自帶的乙個joystick元件,主要...
Unity 之 人物換裝
原理 一 skinedmeshrender 該物件負責網格繪製。主要資料成員包括 var bones transform 骨骼 var materials material 材質 var sharedmesh mesh 網格 其中mesh的主要成員是 vertices vector3 頂點 bone...