Unity Input System教程


針對版本2018.4 LTS與Input System 0.2.1。


 

Unity看起來有兩套負責處理用戶輸入的系統,一套是Input Manager,另外一套是一直在維護與開發的Input System,現在的版本是1.0。但是如果倘若跟我一樣需要修改老的Unity工程,很有可能還是用了老版本的Input System。本文給Unity初學者展示如何使用Input System處理外部按鍵輸入,進而處理游戲邏輯。

首先點擊編輯器菜單Window下Package Manager,確認Input System已經安裝。這里使用的是老版本的0.2.1,從Unity網站上直接下載即可。

 

接下來解釋如何定義按鍵。

當使用了Input System之后,在Project工程目錄內的某個文件夾內點擊鼠標右鍵,可以看到我們可以創建一個Input System。

 

而后輸入一個名字,我們的一個輸入系統就創建好了。

這里需要解釋一下,一個游戲可以有多個輸入系統。每一個輸入系統只是定義了ActionMap和按鍵的映射,和游戲本身邏輯無關,所以許多時候,如果游戲存在多個不同的場景,那么顯然為了區分起見可以創建多個輸入系統,這樣游戲邏輯處理起來會簡單,以及更有條理一些。

繼續工作。在Inspector面板內,點擊Edit asset,就開始定義ActionMap和按鍵的映射。

 

 

這里我們定義了一個WarriorConfig和MagicanConfig,分別對應了戰士和魔法師的動作,這里對於戰士,我們對應了兩種攻擊方式,普通攻擊和快速攻擊,按鍵是f和s。

 

 然后一定要點Save Asset,這樣這個Unity Asset就存儲了這一套規則。

點擊Generate C# Class之后,填好生成的C#文件路徑和類名,點擊Apply,這樣其C#文件就生成了。

 下面開始為游戲對象添加Script,假如場景里有個十字弓Crossbow的腳本文件,當我們要處理按鍵與十字弓動作的關系的時候,需要先定義好對應Input System的成員變量。范例代碼如下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.Input;

public class Crossbow : MonoBehaviour
{
    // Declare  the skill controls.
    [Space] [SerializeField] private SkillControls skilControls;

    void Update()
    {
    }
}

隨后,回到Inspector,可以看到暴露出的成員

 

 

 可以直接從Project拖拽對應的Asset到成員。這里我定義了2套控制,可以看出這一套系統是可以很方便的實現對控制的解耦合。

下面用簡單的代碼演示如何在腳本中處理按鍵事件。

public class Crossbow : MonoBehaviour
{

    [Space] [SerializeField] private SkillControls skillControls;

    void Awake()
    {
        var normalAttack = skillControls.WarriorConfig.NormalAttack;
        normalAttack.Enable();

        normalAttack.performed += OnNormalAttack;
    }

    public void OnNormalAttachk(InputAction.CallbackContext ctx)
    {
        Debug.LogWarning("Normal Attack!");
    }
}

從Awake方法中可以直接獲得所有定義的按鍵事件組合,然后把對應的處理函數交給performed以及cancelled處理。這樣就完成了。

需要注意的是,這種方法需要先Enable對應的InputAction,否則不會工作。

是不是很簡單?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM