目錄
1 Input Manager-Controls 控件
1.1 Key 鍵
1.2 Button 按鈕
1.3 Virtual Axis 虛擬軸(復(fù)數(shù):Axels)
Name 名稱
Ngative Button, Positive Button 負(fù)/正值鍵(按鈕)
2 C#中的Input類
2.1 鍵盤的輸入(獲取鍵盤事件)
Input.GetKey(string KeyName)
Input.GetKeyDown(string KeyName)
Input.GetKeyUp(string KeyName)
2.2 鼠標(biāo)的輸入(獲取鼠標(biāo)事件)
Input.GetMouseButton(int button)
Input.GetMouseButtonDown(int button)
Input.GetMouseButtonUp(int button)
2.3?訪問虛擬軸 Input.GetAxis(string AxisName)
鼠標(biāo)操作
鍵盤操作
Input.GetAxis()和Input.GetAxisRaw()區(qū)別
在Input Manager窗口中可以查看并定義項(xiàng)目輸入軸及其他相關(guān)的操作,這里簡(jiǎn)單介紹一下它擁有的一些控件都是什么意思。
1 Input Manager-Controls 控件
官方文檔:Input Manager - Unity 手冊(cè)
Input Mnager主要使用以下三種控件
1.1 Key 鍵
指物理鍵盤上的任何鍵,比如↑、W、Space空格等。
1.2 Button 按鈕
指一些物理控制器上的按鈕,比如游戲手柄上的X按鈕。
1.3 Virtual Axis 虛擬軸(復(fù)數(shù):Axels)
映射到上面提到的按鈕/鍵,用戶激活控件后,虛擬軸會(huì)得到[-1,1]范圍上的某個(gè)值。Unity中,創(chuàng)建的每個(gè)項(xiàng)目都包含了若干輸入軸,在Input Manager窗口中可以查看輸入軸具有的屬性。
Name 名稱
軸的名稱,可以在腳本中通過Name訪問該軸。
Ngative Button, Positive Button 負(fù)/正值鍵(按鈕)
用于分別沿著負(fù)向和正向推動(dòng)的控件,可以是鍵盤上的鍵,也可以是控制器上的按鈕。輸入設(shè)置中,對(duì)于鍵盤按鍵:(默認(rèn)分別為鍵盤上的“←”和“→”)
- Negative Buttion——負(fù)值鍵,按下將軸設(shè)置成-1
- Positive Button——正值鍵,按下將軸設(shè)置成1
對(duì)于游戲手柄:
控制桿在左側(cè)、中間、右側(cè)分別將水平軸設(shè)置成-1、0和1。
其余的參數(shù)這里就不過多介紹了。
2 C#中的Input類
官方文檔:UnityEngine.Input - Unity 腳本 API
如上,Unity中用Input類控制用戶的輸入,包括鍵盤、鼠標(biāo)、重力感應(yīng)等一些輸入方式。以下介紹一些常用的InputAPI中的靜態(tài)函數(shù):
2.1 鍵盤的輸入(獲取鍵盤事件)
Input.GetKey(string KeyName)
當(dāng)鍵名為KeyName的鍵被持續(xù)按下(長(zhǎng)按有效),返回true。可以被用在自動(dòng)開火等情況。
if(Input.GetKey("up")){
print("up arrow key is held down");
}
Input.GetKeyDown(string KeyName)
當(dāng)某鍵被按下(按下有效)時(shí),返回true.
Input.GetKeyUp(string KeyName)
當(dāng)用戶釋放某鍵時(shí),返回ture
if (Input.GetKeyUp("space"))
{
print("Space key was released");
}
2.2 鼠標(biāo)的輸入(獲取鼠標(biāo)事件)
Input.GetMouseButton(int button)
返回是否按下了鼠標(biāo)的button鍵,button值分別對(duì)應(yīng)
- 0——鼠標(biāo)左鍵
- 1——鼠標(biāo)右鍵
- 2——鼠標(biāo)中鍵
if (Input.GetMouseButton(0))
{
Debug.Log("Pressed left click.");
}
if (Input.GetMouseButton(1))
{
Debug.Log("Pressed right click.");
}
if (Input.GetMouseButton(2))
{
Debug.Log("Pressed middle click.");
}
Input.GetMouseButtonDown(int button)
用戶按下botton鍵的幀期間返回true
Input.GetMouseButtonUp(int button)
用戶松開botton鍵的幀期間返回true
2.3?訪問虛擬軸 Input.GetAxis(string AxisName)
public static float?GetAxis?(string?axisName);
它返回的是一個(gè)值,這是值的含義取決于該軸映射的控制類型。并且需要通過1.3中介紹的屬性Name軸名稱訪問虛擬軸。
例如想要查詢當(dāng)前水平軸的值并儲(chǔ)存在變量中,就可以使用InputGetAxis(string AxisName)訪問:
float horizontalInput = Input.GetAxis("Horizontal");
該軸映射一般分為觸屏類(鼠標(biāo)操作)、鍵盤操作類(鍵盤、控制桿)。
鼠標(biāo)操作
當(dāng)軸映射到鼠標(biāo),返回的float值不在[-1,1],此時(shí)的值為當(dāng)前鼠標(biāo)增量*軸的靈敏度。一般正值表示鼠標(biāo)向右/向下移動(dòng),負(fù)值表示向左/向上移動(dòng)。
鍵盤操作
對(duì)于游戲手柄的控制桿,-1表示向左推到底,1表示向右推到底,0表示在中間。
對(duì)于物理鍵盤操作,分為以下兩種
- Vertical:對(duì)應(yīng)鍵盤的垂直,即上/下鍵,也可以自定義按鍵設(shè)置
- Horizontal:對(duì)應(yīng)鍵盤的水平,即左/右鍵,也可以自定義按鍵設(shè)置
Input.GetAxis()和Input.GetAxisRaw()區(qū)別
最后來簡(jiǎn)單說一下這兩個(gè)都是訪問虛擬軸的方法,它們區(qū)別在哪里。
直接用一個(gè)例子就能很好的證明:
先來看看項(xiàng)目中,控制玩家角色移動(dòng)用的是Input.GetAxis():
horizontal = Input.GetAxis("Horizontal");
//獲取垂直軸
vertical = Input.GetAxis("Vertical");
用Input.GetAxisRaw():
//獲取水平軸并儲(chǔ)存在新變量中
horizontal = Input.GetAxisRaw("Horizontal");
//獲取垂直軸
vertical = Input.GetAxisRaw("Vertical");
二者在場(chǎng)景中對(duì)玩家角色的控制效果分別為:(轉(zhuǎn)向動(dòng)畫沒加上去,看起來會(huì)有點(diǎn)怪)
?
上為Input.GetAxis,下為Input.GetAxisRaw,可以很明顯看出區(qū)別了!
Input.GetAxis()的看上去更順滑,Input.GetAxisRaw()看上去就很干脆。
這是因?yàn)椋?/p>
Input.GetAxis()返回值是范圍[-1,1]上的,能夠平滑過渡;
Input.GetAxisRaw()返回值是{-1, 0, 1}三者中的一個(gè),比較絕對(duì),就沒有平滑過渡的效果。文章來源:http://www.zghlxwxcb.cn/news/detail-475747.html
因此,想實(shí)現(xiàn)不同效果的時(shí)候,可以根據(jù)需要選擇其一。文章來源地址http://www.zghlxwxcb.cn/news/detail-475747.html
到了這里,關(guān)于【Unity入門計(jì)劃】基本概念(7)-Input Manager&Input類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!