一、導(dǎo)入
在Window——PackageManage中搜索InputSystem,下載導(dǎo)入。如果搜不到,則調(diào)整為UnityRegistry。
二、更改輸入模式
Edit——ProjectSettings——Player——OtherSettings——Configuration——Active Input Handling,選擇舊版或者新版,也可以選擇兼容。
三、使用
請使用InputSystem為一個3D對象制作通過鍵盤移動跳躍,鼠標(biāo)攻擊的腳本。
我們先采取直接使用InputAction的方式來編寫腳本,而InputAction則是這個系統(tǒng)的核心。
是InputSystem為我們封裝的一個類,作用是不必通過編寫代碼來獲取設(shè)備的信號輸入,而是直接在Inspector窗口編輯,方便我們專注于編寫按鍵觸發(fā)后的邏輯。
使用前需要引用using UnityEngine.InputSystem。
[Header("移動")]
public InputAction Move;
[Header("攻擊")]
public InputAction Attack;
[Header("跳躍")]
public InputAction Jump;
然后我們直接在Inspector窗口編輯
首先點擊齒輪符號
Action——輸入動作設(shè)置,設(shè)置檢測哪些設(shè)備輸入。
Action Type——動作類型:
-
Value——值類型,主要用于狀態(tài)連續(xù)更改的輸入設(shè)備,如鼠標(biāo)移動,手柄遙感。若有多個設(shè)備綁定此Action,只會發(fā)送最受控制的輸入。
-
Button——按鈕類型,處理按下類型。
-
PassThrough——直通類型,與Value一樣,但如果有多個設(shè)備綁定,會發(fā)送所有設(shè)備的輸入。
- Control Type——控制類型: 在這里選擇你想要的設(shè)備按鍵返回值的類型,之后在選擇對應(yīng)設(shè)備按鍵時會根據(jù)你選擇的內(nèi)容進(jìn)行篩選。
Interaction——相互作用設(shè)置,對特殊輸入進(jìn)行處理,如長按,多次點擊等,滿足條件時才會觸發(fā)(設(shè)置長按時間,點擊次數(shù)等)。
Hold
- Press Point:在Input System中,每個按鍵都有對應(yīng)的浮點值,例如普通的按鍵,將會在0(未按下)和1(按下)之間,當(dāng)大于等于這個值時則認(rèn)為按鍵按下。
- Hold Time 當(dāng)按鈕按下會觸發(fā)started,若在松開按鈕前,按住時間大于等于Hold Time則會觸發(fā)performed,否則觸發(fā)canceled。
MultiTap
多次點擊,例如雙擊或者三連擊。
- Tap Count為點擊次數(shù)。
- Max Tap Spacing為每次點擊之間的間隔(默認(rèn)值為 2 * Max Tap Duration)。
- Max Tap Duration為每次點擊的持續(xù)時間,即按下和松開按鍵的這段時間。 當(dāng)每次點擊時間小于Max Tap
Duration,且點擊間隔時間小于Max Tap Spacing,點擊Tap Count次,觸發(fā)performed。
Press
- Press Only:按下的時候觸發(fā)started和performed。不觸發(fā)canceled
- Release Only: 按下的時候觸發(fā)started,松開的時候觸發(fā)performed
- Press And Release: 按下的時候觸發(fā)started和performed,松開的時候會再次觸發(fā)started和performed。不觸發(fā)canceled
SlowTap
- 在按鍵按住時間大于等于Max Tap Duriation時,松開按鍵觸發(fā)performed
Tap
- 當(dāng)按鍵按下會觸發(fā)started,若在Max Tap Duriation時間內(nèi)(小于)松開按鈕,觸發(fā)performed,否則觸發(fā)canceled。
Processors——處理器,對得到的值進(jìn)行處理(有點長可以不看)
Clamp
將輸入值鉗制到[min…max]范圍。
Invert
反轉(zhuǎn)控件中的值(即,將值乘以-1)。
Invert Vector 2
反轉(zhuǎn)控件中的值(即,將值乘以-1)。如果invertX為真,則反轉(zhuǎn)矢量的x軸;如果invertY為真,則反轉(zhuǎn)矢量的y軸。
Invert Vector 3
反轉(zhuǎn)控件中的值(即,將值乘以-1)。如果反轉(zhuǎn)x為真,則反轉(zhuǎn)矢量的x軸;如果反轉(zhuǎn)y為真,則反轉(zhuǎn)y軸;如果反轉(zhuǎn)z為真,則反轉(zhuǎn)z軸。
Normalize
如果最小值>=零,則將[min…max]范圍內(nèi)的輸入值規(guī)格化為無符號規(guī)格化形式[0…1],如果最小值<零,則將輸入值規(guī)格化為有符號規(guī)格化形式[-1…1]。
Normalize Vector 2
將輸入向量規(guī)格化為單位長度(1)。
Normalize Vector 3
將輸入向量規(guī)格化為單位長度(1)
Scale
將所有輸入值乘以系數(shù)。
Scale Vector 2
將所有輸入值沿x軸乘以x,沿y軸乘以y。
Scale Vector 3
將所有輸入值沿x軸乘以x,沿y軸乘以y,沿z軸乘以z。
Axis Deadzone
axis死區(qū)處理器縮放控件的值,使絕對值小于最小值的任何值為0,絕對值大于最大值的任何值為1或-1。許多控件沒有精確的靜止點(也就是說,當(dāng)控件位于中心時,它們并不總是精確報告0)。在死區(qū)處理器上使用最小值可避免此類控件的無意輸入。此外,當(dāng)軸一直移動時,某些控件不一致地報告其最大值。在死區(qū)處理器上使用最大值可確保在這種情況下始終獲得最大值。
Stick Deadzone
搖桿死區(qū)處理器縮放Vector2控件(如搖桿)的值,以便任何幅值小于最小值的輸入向量都將得到(0,0),而任何幅值大于最大值的輸入向量都將規(guī)格化為長度1。許多控件沒有精確的靜止點(也就是說,當(dāng)控件位于中心時,它們并不總是精確地報告0,0)。在死區(qū)處理器上使用最小值可避免此類控件的無意輸入。此外,當(dāng)軸一直移動時,某些控件不一致地報告其最大值。在死區(qū)處理器上使用最大值可確保在這種情況下始終獲得最大值。
點擊+號
- 添加單個按鈕綁定
- 添加1D軸組合,就是1到-1。
- 2D軸
- 3D軸
- 添加雙組合鍵,如Ctrl+Z
- 添加三組合鍵,如Shift+Win+S;
添加之后雙擊它們
1D Axis
- 負(fù)和正值
Composite Type
- Min Value和Max Value則是正負(fù)值的界限。
- Which Side Win則是當(dāng)代表正負(fù)的鍵同時按下時哪一方獲勝
2D Vector
- 上(0,1)下(0,-1)左(-1,0)右(1,0)
- Mode 處理模式
- Analog——模擬值,浮點值
- DIgital Normalized——單位化向量
- Digital——向量
3D Vector
- 與2D相同
One Modifier
文章來源:http://www.zghlxwxcb.cn/news/detail-434633.html
- 如Ctrl+V,Modifier代表Ctrl,Button代表V。
- Two Modifier
文章來源地址http://www.zghlxwxcb.cn/news/detail-434633.html
- 如Shift+Win+S,Modifier1代表Ctrl,Modifier2代表Win,S代表Button
三、InputAction的一些使用代碼
首先我們需要啟用輸入檢測
然后其擁有三種事件——開始,觸發(fā),結(jié)束
這些擁有一個參數(shù),通過這個參數(shù)我們可以獲得相關(guān)信息
void Start()
{
//啟用
Move.Enable();
//開始事件調(diào)用
Move.started += (con) =>
{
print("start");
};
//觸發(fā)事件調(diào)用
Move.performed += (con) =>
{
//當(dāng)前狀態(tài)
//沒有啟用是 Disabled
//等待是 Waiting
//開始是 Started
//觸發(fā)是 Performed
//結(jié)束是 Canceled
print(con.phase);
//action名字
print(con.action.name);
//控件路徑
print(con.control.path);
//控件信息
print(con.control.name);
//返回的值
print(con.ReadValue<Vector2>());
//持續(xù)時間
print(con.duration);
//事件開始時間
print(con.startTime);
};
//結(jié)束事件時間
Move.canceled += Move_canceled;
}
private void Move_canceled(InputAction.CallbackContext obj)
{
print("canceled");
}
到了這里,關(guān)于論Unity_InputSystem如何使用(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!