UnityInputSystem教程
针对版本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
{unity 教程
// 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,否则不会⼯作。
是不是很简单?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论