unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
本文已参与「新人创作礼」活动,一起开启创作之路。
unity推出了最新的输入系统Input system,不敢说一定比老版本Input manager好。键盘输入的话,个人觉得还是老的输入系统好,不过如果是Xbox手柄的话,个人认为新系统坐实舒服!就让喜新厌旧的我带大家看看吧哈哈
这里是官方英文文档
首先,确保你的项目是Unity 2019.1以上版本, 并且API设置为 .NET 4 runtime( 2021/1/23更新)
然后导入package:windows->package manager
Tip:记得检查一下你的Edit->Project Settings->Player->Other Settings->Active Input Handing,它默认应该是Both(即两种都可用),你只要保证它不是Input Manager(Old)即可
(现在导入input system后会自动改为Input SystemPackage)
以前应该是自动创建的,现在需要点一下才能创建setting asset(我点过了,没这个图了……下图是另找的)(2021/1/23更新)
Property | 介绍 |
---|---|
Default Deadzone Min | 盲区的最小值,输入值小于该值就会被认为为0(这是为了防止无意的输入) |
Default Deadzone Max | 盲区最大值,输入值大于该值则被认为是1(有些设备不会一直返回最大值,设置它可以帮助保持) |
Default Button Press Point | 针对有按钮的设备,这代表它们需要被按住多长时间,系统才能认为它们已被按下 |
Default Tap Time | 针对触摸屏,同样代表它们需要被按住多长时间,系统才能认为它们已被按下 |
Default Slow Tap Time | 默认的慢点击时间. |
Default Hold Time | 默认的持续按住的最短时间 |
Tap Radius | 在触摸屏上,两个手指点击之间的最大距离,系统认为这是同一触摸点击,而不是更多. |
Multi Tap Delay Time | 两次点击之间的最小时延(也是给触摸屏用的) |
下面就是在场景中创建一个物体(我选Capsule胶囊),然后给它命名为player,再给它添加Rigibody和player Input组件
(点Create Actions会创建一个unity已做好的Action模板,模板很全面,很有参考价值)
(2021/1/23更新)
在project窗口下右键create->InputActions,做个重命名(此处命名为InputControl)
(2021/1/23更新)
Action Type | 解释 |
---|---|
Value | 当你绑定了多个输入设备。如果你在同一时间内,只希望有一个输入设备在使用,就选这个(如果选了这个,并且在同一时间使用了两个输入设备,unity就只认输入值大的那个) |
Pass through | 当你绑定了多个输入设备。如果你在同一时间内,还想处理多个输入设备的输入值,选这个 |
Button | 顾名思义,只要是按键就选这个(用键盘的话,基本上就是这个了) |
![]() |
右键movement,Add 2D Vector Composite添加2D操作内容
(也可Add Binding,然后直接绑定遥感即可,自动就是二维的了)
将2D Vector 的Mode改为Analog,这样可以完美发挥摇杆输入是浮点数的优势(当然,这一步并不是必要的)
将刚才设置好的InputControl加到胶囊胶囊体的Actions上,其他内容默认即可(2021/1/23更新)
下面就是代码了,将这个脚本也挂上去就可以咯 注意最上面要有:
using UnityEngine.InputSystem;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
private bool grounded; //判断是否在地面上
private Vector2 moveValue;
public float moveSpeed =3f; //移动速度
private void Update()
{
transform.Translate(new Vector3(moveValue.x,0,moveValue.y)*moveSpeed*Time.deltaTime);
}
void OnMovement(InputValue value) //用这个方法来响应你的输入
{ //你是否也发现了它和InputControl中Actions里的名字很像呢?
moveValue = value.Get<Vector2>();
Debug.Log(value.Get<Vector2>()); //在console窗口显示你的输入值
}
void OnJump() //附赠的跳跃方法哈哈
{
if (grounded)
{
GetComponent<Rigidbody>().velocity += new Vector3(0, 5, 0);
grounded = false;
Debug.Log("I am Pressing Jump");
}
}
private void OnCollisionEnter(Collision collision)
{
grounded = true;
}
}
聪明如你是不是已经发现了方法名称和Actions有什么联系了呢?
你是不是还想知道跳跃是怎么设置的?如下添加Action和binding就行咯:
现在你可以按照自己的创意玩转新输入了!!!