1. 程式人生 > >【Unity&按鍵設定】按下任意按鍵,返回按鍵的名稱

【Unity&按鍵設定】按下任意按鍵,返回按鍵的名稱

實現的是:按下任意按鍵,返回按鍵的名稱

根據參考資料1

1.方法 OnGUI() 函式的時間Event方法

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnGUI() {
        Event e = Event.current;
        if (e.isKey)
            Debug.Log("Detected key code: " + e.keyCode);
        
    }
}
按一次按鍵,會顯示 2次相同的

上述程式碼,把事件 直接 放在 除了OnGUI函式 以外的函式都 會顯示 沒有例項化 物體。

有個 事件 監聽 的元件,推匯出方法3

除了少量按鍵無法識別,大多數按鍵是可以識別的

2.方法 對每個按鍵進行IF語句判斷,判斷當前按下的任意 鍵

參考資料2,本文不再贅述

遍歷 每個按鍵的程式碼

  1. usingUnityEngine;
  2. usingSystem;
  3. usingSystem.Collections;
  4. usingSystem.Collections.Generic;
  5. publicvoid detectPressedKeyOrButton()
  6. {
  7. foreach(KeyCode kcode inEnum
    .GetValues(typeof(KeyCode)))
  8. {
  9. if(Input.GetKeyDown(kcode))
  10. Debug.Log("KeyCode down: "+ kcode);
  11. }
  12. }
  1. // You can use this FetchKey() Method if you like,
  2. // it's from the top of my head but It
  3. // should return which key is currently pressed down,
  4. // although it will only return the first
  5. // key it finds, you can modify it to return
  6. // KeyCode[] containing all keys currently held
  7. // down if you need to.
  8. KeyCodeFetchKey()
  9. {
  10. e =System.Enum.GetNames(typeof(KeyCode)).Length;
  11. for(int i =0; i < e; i++)
  12. {
  13. if(Input.GetKey((KeyCode)i))
  14. {
  15. return(KeyCode)i;
  16. }
  17. }
  18. returnKeyCode.None;

3.

結合資料1和3,可以得出以下程式碼

 void SetCurrent()
    {
        Event e = Event.current;
        if (e.isKey)
        {
            Debug.Log(" BBB  "+ e.keyCode);
        }
    }

中都沒有說明

第一次是成功的,不知道為什麼 再測試,就失敗了

4.

和方法1類似

當你需要檢查是否某個鍵被按下時(可能帶有修改鍵)這個很有用,key的字串是鍵的名字(同輸入管理器一樣),任選任意數量修改鍵字首:& = Alternate,^ = Control,% = Command/Windows key, # = Shift

using UnityEngine;
using System.Collections;
 
public class ExampleClass : MonoBehaviour {
    void OnGUI() {
        GUILayout.Label("Press Enter To Start Game");
        if (Event.current.Equals(Event.KeyboardEvent("[enter]")))
            Application.LoadLevel(1);
 
        if (Event.current.Equals(Event.KeyboardEvent("return")))
            print("I said enter, not return - try the keypad");
 
    }
}

5.

Debug.Log((string)Input.inputString);

使用這個方法可以 返回 對應 按鍵 的小寫 英文字母

只能檢測 當前鍵盤 輸入的字母 和數字,其他的按鍵 均返回 空null

Event.current.type

返回的是KeyDown和KeyUp

為什麼會顯示兩次統一按鍵,因為Input.anyKeyDown和Input.anyKey函式,各呼叫一次

選擇當Input.anyKeyDown或者Input.anyKey函式呼叫的時候,就執行一次程式碼

 void OnGUI()//僅用作 響應 任意按鍵
    {
        Event e = Event.current;
        //Debug.Log(Event.current.type);
        if (AnyKeyControl_Bool)
        {
            if (e.isKey)
            {
                if (Input.anyKeyDown)
                {
                    //清空按下幀數
                    keyFrame = 0;
                    Debug.Log("任意鍵被按下");
                    Debug.Log("Detected key code 1: " + e.keyCode);
                }

                if (Input.anyKey)
                {
                    keyFrame++;
                    timeDelay+=Time.deltaTime;
                    TestAnyKey = e.keyCode;
                    Debug.Log("任意鍵被長按" + keyFrame + "幀");
                    Debug.Log("Detected key code 2: " + TestAnyKey);
                    Debug.Log("時間: " + timeDelay);
                }
            }
        }

}

每一次按鍵 幀數 所花的時間 為0.02S,這一幀到下一幀呼叫的時間是0.02S

參考資料:

1.

2.

3.

4.

5.

6.

7.

8.

相關推薦

Unity&按鍵設定任意按鍵返回按鍵名稱

實現的是:按下任意按鍵,返回按鍵的名稱 根據參考資料1 1.方法 OnGUI() 函式的時間Event方法 using UnityEngine; using System.Collections; public class example : MonoBehaviou

如何設定visualstudio任意英文字母時均有程式碼提示

WPF繫結陣列的問題大量控制元件類似事件能否批量新增如何快速實現或者如何判斷要執行的是哪個控制元件WPF繫結陣列的問題大量控制元件類似事件能否批量新增如何快速實現或者如何判斷要執行的是哪個控制元件 WPF展示圖片時記憶體要如何才能釋放=============對AntiXSS

textarea回車傳送訊息不換行怎麼實現?

<textarea id="a" style="height:300px; width:500px"> </textarea> <script type="text/javascript"> document.onkeydown=function

Unity學習筆記Unity設定單位長度與畫素間的對應關係

在製作Roguelike遊戲時,需要隨機生成tiled地圖,此時需要將Unity的一個單位與Sprite的畫素相對應,方法如下: 1、單擊資原始檔夾下的Sprite; 2、在Inspector下的Pixel Per Unit屬性下填入一單位長度所對應的畫素數。

Unity&人物屬性人物屬性大量設定用set,get方法還是public成員

當使用到設定人物屬性的時候,使用set,get方法還是 直接把 人物屬性 設定 為  public成員 本文沒有描述SendMessage方法和使用單例。 ----------------------------------------------------------

Unity編程歐拉角與萬向節死鎖(圖文版)

num 接頭 標記 轉發 b2c 出現 spl 探索 質量 萬向節死鎖(Gimbal Lock)問題 上文中以前說過,歐拉旋轉的順規和軸向定義,自然造就了“萬向節死鎖”問題。本文主要來探索它自然形成的原因。 陀螺儀 首先。我們來了解Gimbal

軟件編譯vs2013編譯notepad++源碼

編譯notepad++1 下載notepad++源碼 登錄notepad++官網https://notepad-plus-plus.org/2 對scintilla進行編譯,獲得SciLexer.dll文件 具體編譯方法請自行谷歌,本人趕時間,直接從已安裝的notepad++中復制了一份。

Unity遊戲開發淺談Unity遊戲開發中的單元測試

可靠 屬於 sin 自定義類型 允許 ogr 兩個 階段 ast 一、單元測試的定義與作用   單元測試定義:單元測試在傳統軟件開發中是非常重要的工具,它是指對軟件中的最小可測試單元進行檢查和驗證,一般情況下就是對代碼中的一個函數去進行驗證,檢查它的正確性。一個單元測試是

暫未解決win10安裝VS2017 15.3版本 提示 未能安裝包“Microsoft.NET.4.6.FullRedist.NonThreshold.Resources,version=4.6.81.9,language=zh-CN”。

nis source 方式 ins urn pac 故障 鼓勵 報告 win10下安裝VS2017 15.3版本的時候,出現以上錯誤日誌提示,請問如何解決的哇? 這個問題,開始我以為是我的安裝包所在的路徑問題引起的,但是我將安裝包移動到了磁盤根目錄進行安裝,依然出現

Unity-ShaderLab入門 Shader是什麽?

shade 一個 片元 fragment 時也 器) 變量 時間 gin ShaderLab 是Unity3d自己封裝的一個調用CG/HLSL/GLSL的接口。 Shader相關文件(擴展名): shader - 著色器的主要文件 cg/cginc - 著色器的公用文

unity中 UGUI的、拖動接口事件的實現

pointer 攝像機 sys parent generic npoi del 返回 ren using UnityEngine; using System.Collections.Generic; using DG.Tweening; using UnityEn

Unity遊戲開發AssetBundle雜記--AssetBundle的二三事

比較 streaming 指定 但是 chunk 加載 公司 prefab 方法 一、簡介   馬三在公司大部分時間做的都是遊戲業務邏輯和編輯器工具等相關工作,因此對Unity AssetBundle這塊的知識點並不是很熟悉,自己也是有打算想了解並熟悉一下AssetBun

unity實用技能u3d 獲取屏幕的寬高

無想搞個全屏Sprite,獲取Screen.Width什麽的都不對。 因為這個跟你的Camera的aspect有關。 所以有個很簡單的方法 首先一般你的項目都會限度是以寬還是高做基準來拉伸 我們是橫版遊戲,所以是寬做基準 我們的寬定的標準值為1334. 所以是這樣 public int GetScreenHe

小松教你手遊開發unity實用技能unity所有特殊文件夾的用途(轉自雨松momo)

unity實用技能這裏列舉出手遊開發中用到了所有特殊文件夾。 Unity3D研究院之手遊開發中所有特殊的文件夾 - 雨松MOMO程序研究院 1.Editor Editor文件夾可以在根目錄下,也可以在子目錄裏,只要名子叫Editor就可以。比如目錄:/xxx/xxx/Editor 和 /Editor 是一

小松教你手遊開發unity實用技能角色頭部跟隨鏡頭旋轉

無這個在端遊上比較場景,在角色展示的時候,當攝像頭在角色身邊上下左右旋轉時,角色頭部跟隨鏡頭旋轉。如天涯明月刀等。 這個在手遊上比較少見,不過實現也沒什麽區別。 首先一般情況下,找到模型的頭部節點,直接用lookAt指向camera就可以了,不過一般需求不會這麽簡單。 比如說,超過頭部扭動極限,頭部需要插值回

unity實用技能unity3d 陀螺儀控制camera移動旋轉

無https://docs.unity3d.com/ScriptReference/Gyroscope.html unity 官方文檔就很清楚,只有一點要註意: 所有教程都教你怎麽用 input.gyro.attitude 但是這個表示的是空間中的位置,首先你是想做像王者榮耀開頭晃動攝像機的效果,需要把上個位

unity實用技能unity編輯器工具之加載預制(Prefab)和場景(Scene)

無在unity裏做打包或者幫策劃美術做工具的時候經常會需要把Prefab拉出來或者場景打開做檢驗工作 其實這個在上一篇在ui打包的文章裏有提到,不過重點不同,上篇重點是打包,這篇的重點是把裏面的一個小知識點拉出來講一講 接下來就講講兩者分別怎麽做 一、把預制Prefab拉出來 就是像我們平時把預制拉到這個地方

unity實用技能unity在遊戲中更換角色的shader比如加個流光

無原本想著這個功能怎麽實現,剛好在項目裏看到這裏記錄一下。 首先項目的模型裏會有一個基本的Material,這個就是美術出給你的模型的材質。 可能有的需求是在遊戲中觸發一個事件,你身上加個流光或者描邊等效果。 我們知道這些效果如果要表現在身上,用特效是不好看的,要用Shader去表現。 這時候就需要你換一個S

小松教你手遊開發unity實用技能unity性能問題查找方法

無這次先說一下mono內存的性能問題查找方法mono主要是代碼問題,各種解決方案在其他地方會講到,首先就是解決每個尖峰,這個會導致gc,mono堆內存申請等問題。 1.先用cube來測 手機上跑一局看看數據 可以看到在這裏申請了內存,可以看到。這時候首先有個向下的尖峰,這個是執行了一次gc。然後mono發現,

小松教你手遊開發unity實用技能給每個GameObject的打開關閉加上一個漸變

無 手遊開發 在遊戲開發中,經常會因為直接將GameObject,setActive的方式打開關閉,這種方式效果太過生硬而給它加上一個Tween 可能是AlphaTween或者ScaleTween。 再加上一個PlayTween來做控制。 這樣子需要在每個GameObject上加上這幾個Compone