文章目录
- unity2022.1.8之后版本的新的输入行为控制对象变化
- 怎么导入?
- 如何使用?
unity2022.1.8之后版本的新的输入行为控制对象变化
我们先了解大概的逻辑。我们要设置触发行为的方式并且让他和对象的行为绑定,再将行为和对象绑定,最后再绑定对应对象的行为函数里的函数方法,实现我们要的通过触发来控制对象变化。
在那之前,我们要先导入对应的包。
怎么导入?
先在系统设置里去启动新的输入方式。
然后会有提醒,让我们重启。
去仓库里把对应新版本的包下载下来。
然后就可以使用了。
如何使用?
- 创建行为和对应触发方式
在任意文件夹下右键 >create>Input Actions 创建对应的绑定文件。
这样frog对象的行为我们就设置好了,接下来就只需要让他和我们的图中对象进行绑定就好了。
-
将刚才行为的触发方式和对象绑定。
-
创建对应的反应函数:
-
把做出的变化绑定到对象上
我们编辑下具体要做出的动作:在按下跳跃键后输出台会输出 “起跳!!!!!”。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayController : MonoBehaviour
{
public void jump()
{
Debug.Log("起跳!!!!!");
}
}
我们再把它和行为绑定。
这样,我们就可以看到 "起跳!!!!!"被执行了。恭喜你,已经学会了如何去将触发和人物的变化进行绑定。
之后是DLC,记录了一个小问题。
DLC : 结果被执行了两次
"起跳!!!!!"被执行了,但被执行了两次。
为什么呢?
我们再加入一个回调参数,帮助我们观察这之中究竟发生了什么。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayController : MonoBehaviour
{
public void jump(InputAction.CallbackContext context)//这里加入回调参数
{
Debug.Log("起跳!!!!!" + context);
}
}
之后需要重新选择下函数。
我们看下结果:
可以发现如果我们不刻意规定,它默认是在 开始阶段
和 达到操作要求阶段
都会执行我们要的操作,这显然是不合理的。
我们加个 if 规范下它。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayController : MonoBehaviour
{
public void jump(InputAction.CallbackContext context)
{
//TODO:这个todo是标记我们要在这个函数里做什么,除此之外没什么蛋用。
//如果玩家已经达到操作触发要求,那么打印 “起跳!!!!!”
if(context.phase == InputActionPhase.Performed) Debug.Log("起跳!!!!!" + context);
}
}
可以发现这样的话,就只打印了一次。
问题圆满解决!!! 撒花!!!!