05-全新输入系统 input system
1. 下载输入系统
![](/assets/image-20230419165430750-BXJiowr_.png)
![](/assets/image-20230419165602992-CKvaPOuU.png)
![](/assets/image-20230419165716537-CjhHIMnk.png)
![](/assets/image-20230419165744617-BjdW-zvH.png)
那么旧的是什么呢?
![](/assets/image-20230419165818003-0yDk7O-w.png)
新的优势是:可以同时设置多平台,多输入系统。
例如:键盘、鼠标、手柄、操纵杆、触控设置,在新输入系统中,只要设置一套输入,就可以满足各个平台的输入。
![](/assets/image-20230419170809955-BCqqN5Hy.png)
第二个就是最新系统,Both 就是两个都使用。
![](/assets/image-20230419170904158-eWvmUVAt.png)
![](/assets/image-20230419170941241-r0IUc_c0.png)
![](/assets/image-20230419171532073-BBJr1MVX.png)
![](/assets/image-20230522001417960-DOg1a1AU.png)
![](/assets/image-20230522001522498-LuVjepGN.png)
![](/assets/image-20230522001542069-B4nMveFc.png)
![](/assets/image-20230522001552316-cYDfCgVK.png)
![](/assets/image-20230419172024055-LU7i2wB1.png)
![](/assets/image-20230522001617404-Dwkh3oHb.png)
![](/assets/image-20230419172207189-mTBUB9DA.png)
查看文档
![](/assets/image-20230419172400456-CGYsC7p-.png)
![](/assets/image-20230419172840019-CNtI48j7.png)
2. 使用输入系统
2.1 新建文件夹
![选择 Assets](/assets/image-20230419173452844-_QJRcaau.png)
![](/assets/image-20230419175444683-CBg-kSWw.png)
![](/assets/image-20230419175550787-BMIJWOpL.png)
![](/assets/image-20230419175620981-DHvbmzmQ.png)
![](/assets/image-20230419175705102-7pPMQytH.png)
![](/assets/image-20230419175954746-B2dCrnGd.png)
![](/assets/image-20230419180009291-D5oFdT5g.png)
![](/assets/image-20230419180031262-bvx7bZb8.png)
你的项目可以有多个 Action Maps。在什么场景使用什么输入:游戏开始、游戏结束、游戏重启啥的用不同的 input map。
在左上角,我们可以创建游戏的配置表:
![](/assets/image-20230424145820528-BVs1DcAy.png)
比如说键盘使用哪一套按键配置,手柄用的是哪一个配置。
![](/assets/image-20230424145931837-D1cStBzD.png)
![](/assets/image-20230424150217242-LCzMo6dM.png)
![](/assets/image-20230424150336813-By0wfDS2.png)
还没有对应的键盘。
![](/assets/image-20230424150751020-MPW3x6PI.png)
当然,最方便的不是这个。最方便的是,你要找到想要的键盘不容易,这个时候怎么办?它可以监听:
![](/assets/image-20230424151006994-Db-PWkLA.png)
![](/assets/image-20230424151225040-Cb9Q907w.png)
![](/assets/image-20230424151304066-DMat1jxl.png)
除了使用空格,我还想使用屏幕上的按钮呢?可以再添加一个:
![](/assets/image-20230522101540358-D1mLHm4W.png)
![](/assets/image-20230424151411086-4sR65BS2.png)
![](/assets/image-20230424151455237-BkMQZbjq.png)
![](/assets/image-20230424151551946-D6GxXnJw.png)
![](/assets/image-20230424151724469-DVY7RxaZ.png)
在这里,你可以看到当前的类型,是按钮类型。
我们也可以设置按下的类型:
![](/assets/image-20230614180726623-DXPhwlIM.png)
接着我们可以发现,Interactions 互动类型。「我目前点击的是 Jump」其次,还需要把 jump 的 Action Type 改回 Button。
![](/assets/image-20230424152019860-CUklwJcU.png)
可以设置按多久,超过时间就失效:
![](/assets/image-20230424152153601-B8UHyzZc.png)
![](/assets/image-20230424152236126-DoiNluvX.png)
上面我们完成了短按,在这个游戏里面我们还需要长按,我们来新建一个:
![](/assets/image-20230424152708760-BQol5JwL.png)
![](/assets/image-20230614181908198-DOQ6J4L7.png)
![](/assets/image-20230614181929629-CUF_oWbT.png)
我们还需要小青蛙可以左右移动,所以小青蛙需要可以识别。那么我们可以使用什么原理来实现呢?——我们可以使用坐标来判断是左还是右。
![](/assets/image-20230424152932720-fwoghbb_.png)
![](/assets/image-20230424153050946-C6jUpqN1.png)
![](/assets/image-20230424153116187-xDPumsHk.png)
之后我会讲我们如何在电脑上模拟这些操作。
![](/assets/image-20230424153208000-Dm7dULbH.png)
3. 如何使用呢?
我们找到我们的 Frog 来使用,然后添加组件:
![](/assets/image-20230424153636900-DLAQbZVz.png)
![](/assets/image-20230424165042810-X0u1eCw3.png)
我们就可以添加一个上面添加的 Action。
可以拖拽也可以点击右侧查找。
![](/assets/image-20230614182339013-CjJYF3HY.png)
![](/assets/image-20230424165539976-BFKHtB_A.png)
选择事件驱动:
![](/assets/image-20230614182720008-ByvDmHTd.png)
![](/assets/image-20230424165648490-BLoHvYga.png)
![](/assets/image-20230424165729849-DGcouAU1.png)
有很多事件,例如当你的手柄断连了,游戏暂停。当你连接上就执行继续游戏。
当你手机没电了,它就会执行断连操作。
![](/assets/image-20230424165948874-15bB3dCQ.png)
4. 那接下来,我们进行编写我们的第一个代码了
![](/assets/image-20230424170248798-CIzCXFox.png)
当我们执行点击跳跃操作的时候,我们应该执行上面角色和事件。
「我们要让哪个物体执行什么方法」也就是每当我们执行跳跃方法的时候,会执行下面所有事件。
![](/assets/image-20230503145143624-DgWHwIDi.png)
![](/assets/image-20230503145400778-BYp2dN4F.png)
文件名称和类名要一致:
![](/assets/image-20230503145443569-D-SScIJX.png)
![](/assets/image-20230503145608673-EnTDmeFZ.png)
![](/assets/image-20230522110214243-CamfF034.png)
5. 编写代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Start is called before the first frame update
// 开始的第一帧,才执行的方法
void Start()
{
}
// Update is called once per frame
// 循环执行,每一帧都执行,如果你的游戏达到了 60帧,那你的程序就会每秒执行 60次
// 所以,游戏不断的操作,要放在 update 里面执行
void Update()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public void Jump()
{
// 创建一个默认的函数写法
// public 公开的,其它类都可以调用
// void 没有返回类型
Debug.Log("Jump! Hello...");
}
}
![](/assets/image-20230508152002048-DBkp14t9.png)
![](/assets/image-20230508152138928-8AgPNqkc.png)
现在我们可以捋一下思路,我们可以点击刚刚对于 Jump 设定的功能,也就是按下空格或者点击屏幕可以实现控制台输出。
你可以点击运行即可:
![](/assets/image-20230508152830093-CaA54k0z.png)
![](/assets/image-20230508153040761-D4RTiP17.png)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public void Jump()
{
// TODO: 执行跳跃,跳跃的距离,记录分数,播放跳跃的音效
// 创建一个默认的函数写法
// public 公开的,其它类都可以调用
// void 没有返回类型
Debug.Log("Jump! Hello...");
}
}
有人有可能会发现,我们按下空格后,这个函数被执行了两次,是为什么呢?——因为,按下、松开所以调用了两次。这里面是有回调的方法,可以试一试下面的代码,使我们的输出更多的信息:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public void Jump(InputAction.CallbackContext context)
{
// TODO: 执行跳跃,跳跃的距离,记录分数,播放跳跃的音效
// 创建一个默认的函数写法
// public 公开的,其它类都可以调用
// void 没有返回类型
Debug.Log("Jump! Hello..." + context);
}
}
![](/assets/image-20230508160944874-CElyE3Er.png)
因为被我们修改了代码,所以显示的是 Missing。所以,这样我们就和上面操作一样:
![](/assets/image-20230508171240684-CPA0wSgu.png)
接下来可以运行试一试:
![](/assets/image-20230508172449638-DFuk9EF2.png)
通过观察,我们可以发现,是执行了两次。
那我们可以添加一个判断语句:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public void Jump(InputAction.CallbackContext context)
{
// TODO: 执行跳跃,跳跃的距离,记录分数,播放跳跃的音效
// 创建一个默认的函数写法
// public 公开的,其它类都可以调用
// void 没有返回类型
if (context.phase == InputActionPhase.Performed)
{ // 这样只有在功能完全的输出,我们才有里面的内容
Debug.Log("Jump! Hello..." + context);
}
}
}
这样只有一条执行了。
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】
![](/gzh.jpg)
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Linux、Web全栈」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
![](/zsxq.jpg)
- 0
- 0
- 0
- 0
- 0
- 0