截獲鼠標,鍵盤的消息
監聽事件我們都是在Update里面監聽的。
Unity的虛擬軸打開:Edit-->Project Settings-->Input,打開的各個Name就是雙引號里面要填的,記不住就打開查,也可以自己定義一些按鍵。
一、Input的主要變量
1: mousePosition: 當前鼠標的像素坐標;
2: anyKey/anyKeyDown: 當前是否有按鍵按住;
3: inputString: 本次update時間間隔內輸入的字符串;
4: acceleration: 重力加速度傳感器的值,加速度的方向;
5: touches: 返回當前所有觸摸對象的列表Touch[],觸摸屏可以支持多根手指軌跡;
二、Input的主要方法
1: GetAxis/GetAxisRaw: 返回表示虛擬軸的值:
2: GetButton/GetButtonDown/GetButtonUp 虛擬按鈕
3: GetKey/GetKeyDown/GetKeyUp 按下制定按鈕;
4: GetMouseButton
GetMouseButtonDwon
GetMouseButtonUp
5: GetTouch(index) 返回當前觸控Touch對象;
6: 打開InputManager: 配置虛擬軸;
三、Input使用實例
1.創建一個Canvas
2.對Canvas進行初始化
3.創建一個Image的UI節點作為Canvas的子節點,名字叫bg,拖進背景圖片到這個節點中。
4.創建一個叫Game_scene的腳本,掛載到Canvas下面
5.Game_scene腳本內容:
void Update () { // 以屏幕的左下腳為原點; // Debug.Log(Input.mousePosition); // 當前鼠標的位置; // 如果一個按鍵一直按住,那么每幀都會返回True,只到彈起; // 鍵盤,鼠標的key /*if (Input.anyKey) { Debug.Log(Input.anyKey); }*/ // 檢測按鍵按下,但是,一旦按下以后,后面就不觸發了。 // 如果一個按鍵一直按着,那么這個只會按下的那幀觸發true, /*if (Input.anyKeyDown) { Debug.Log(Input.anyKeyDown); }*/ // 返回你在本次update里面輸入的assic字符 /*if (Input.inputString.Length > 0) { Debug.Log(Input.inputString); }*/ // end // 重力加速度的方向,那你就可以根據這個方向來獲得輸入。 // 如果沒有重力傳感器,那么就是(0, 0, 0); Vector3的對象; // Debug.Log(Input.acceleration); // Debug.Log(Input.touchCount); // 獲得當前的觸摸的事件的個數; /*if (Input.touchCount > 0) { // Input.touches // Touch []; }*/ // Horizontal 是這個虛擬軸,Eidt --> ProjectSetting -->Input // 由1-->0, 遞減的插值的; // GetAxis 變化的時候,是有插值的。 // float value = Input.GetAxis("Horizontal"); /*float value = Input.GetAxisRaw("Horizontal"); if (value != 0.0f) { Debug.Log(value); }*/ // 距離上一次鼠標的變化; dx, dy /*float mouse_dx = Input.GetAxis("Mouse X"); float mouse_dy = Input.GetAxis("Mouse Y"); Debug.Log(mouse_dx + ":" + mouse_dy);*/ // 不會有插值的,1,0 // float value = Input.GetAxisRaw("Jump"); // Debug.Log(value); // 鼠標左鍵, /*if (Input.GetButton("Fire1")) { Debug.Log("fire1 click"); }*/ // 只是在按鈕,按下那一刻,為真, /*if (Input.GetButtonDown("Fire1")) { Debug.Log("fire1 down"); } //彈起來那一刻為真 if (Input.GetButtonUp("Fire1")) { Debug.Log("fire1 up"); }*/ // 鍵盤上的P按鍵, 如果按下不松,會一直為true // GetKeyDown, GetKeyUp,只在狀態改變的時候為真 /*if (Input.GetKeyDown(KeyCode.P)) { Debug.Log("Key p down"); } if (Input.GetKeyUp(KeyCode.P)) { Debug.Log("Key p up"); } if (Input.GetKey(KeyCode.P)) { Debug.Log("P"); }*/ // 判斷鼠標按鍵有沒有按下, int button(0(左), 1(右), 2(中)) if (Input.GetMouseButtonDown(2)) { Debug.Log("mouse left down"); } if (Input.GetMouseButtonUp(2)) { Debug.Log("mouse left up"); } // Move來使用。 if (Input.GetMouseButton(2)) { Debug.Log("mouse left all ways"); } }
四、虛擬軸定義
1: Name: 軸的名字;
2: Descriptive: 正向方向描述;
3: Button:正向反向按鈕和附加按鈕;
4: Gravity:復位的速度,用於按鍵和鼠標;
5: Dead: 小於該值的輸入值, 都會被視為0,用於搖桿。
6: Sensitivity(靈敏度): 對於鍵盤輸入,該值越大則響應時間越快,該值越小則越平滑。對於鼠標輸入,設置該值會對鼠標的實際移動距離按比例縮放
7: Snap對齊: 如果啟用該設置,當軸收到反向的輸入信號時,軸的數值會立即置為0,僅用於鍵/鼠標 輸入。
8:Invert 反轉: 啟用該參數可以讓正向按鈕發送負值,反向按鈕發送正值。
9:Type 類型: 所有的按鈕輸入都應設置為 鍵/鼠標 (Key / Mouse) 類型,對於鼠標移動和滾輪應設為 鼠標移動(Mouse Movement)。搖桿設為搖桿軸 (Joystick Axis),用戶移動窗口設為窗口移動 (Window Movement)。
10:Axis 軸: 設備的輸入軸(搖桿,鼠標,手柄等)
11:Joy Num 搖桿編號: 設置使用哪個搖桿。默認是接收所有搖桿的輸入。僅用於輸入軸和非按鍵。
五、Touch對象
1:fingerID; 手指ID
2: position 手指位置
3: deltaPosition 距離上一次的偏移;
4: phase: 觸摸相位TouchPhase.Began Moved, cancel, ended;
5: Touch事件同時會觸發 GetMouseButton(0)事件,能夠使用Input.GetAxis("Mouse X/Y")獲取觸摸偏移位置;
6: 到底用Touch還是用Mouse,如果對觸摸的准確性要求不高,可以使用Mouse,否則還是區別對待,使用Touch,如果要多點觸控,那么自己判斷,直接自己使用Touch
void Update () {
if (Input.touchCount > 0) { Touch t = Input.GetTouch(0); // t.position; //觸摸的位置; // t.deltaPosition; // 距離上一次,位置的偏移 // t.phase // 觸摸的相位,-->狀態, 按下,滑動,彈起,cancel; // Touch,只在移動設備上能用,所以統一,鼠標和這個Touch, // Touch同時也會發送一個 鼠標左鍵的事件,模擬一次鼠標左鍵; // GetMouseButton(0), 鼠標,和觸摸都可以當作鼠標事件來處理,那么 // 我們的代碼就只要寫一次。單點觸摸的時候。 // 多點觸摸,自己處理Touch事件。 // 單點觸控 // t.position, --> mousePostion; // t.deltaPosition --> Input.GetAxis("Mouse X/Y"); // Begin(Down), ended(Up), moved(Button) // end }
}