![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第1张](https://img2.tapimg.com/bbcode/images/0eee9d45244bcb5ee57771032d98bed6.jpeg)
不过这次的目标稍微有点不同。上次就是自己玩玩,这次我是打算真正写一个所有人都能玩的同人游戏。我将全部使用大家的自制素材,还会在实现经典玩法后收集一些大家想要但是凉屋没空写的玩法自己尝试写。
我是一个游戏开发萌新,所以本系列的代码实现绝对不是最好的解决方案。也欢迎各路大佬指出错误,我们可以一起探讨代码中存在的问题以及如何解决。
如果大家在观看本系列帖子时有任何疑问,都可以直接问。互相学习交流一定会比自己闭门造车好得多。
使用引擎:Unity 2021.2 Personal. 使用代码编译器:Visual Studio Community 2019
不同的版本API及各种实现方式都会有所差距,可以查看Unity及微软的官方文档
让我们开始吧!
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第2张](https://img2.tapimg.com/bbcode/images/7227bd448223ea412a7d7ffb3500d526.jpeg)
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第3张](https://img2.tapimg.com/bbcode/images/7e44d5d8e06813bd04b59851ebda9e4c.png)
我准备在第一期使用的素材是由喵宅 大佬热心提供的。再次表达万分感谢。原素材为GIF类型图,但Unity并不支持该类型,直接导入后仅会有第一帧图片
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第4张](https://img2.tapimg.com/bbcode/images/d517ffb8a375ac211203b0ca04a198aa.png)
但是我们可以将GIF图转为多张图片,到时候一起做帧动画。这里我找到了一个可以拆分GIF图的网站
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第5张](https://img2.tapimg.com/bbcode/images/4e902b7df420b43b9d58d92bc14df7c6.png)
然后我发现得到的图片好像有点大,所以我又找了一个编辑图片的网站,开始了漫长的P图之旅
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第6张](https://img2.tapimg.com/bbcode/images/86c19e34918e049975b56fea9970899d.png)
在跑题到图片处理教程后,我们这才步入重点
——————
用户输入
我打算使用Unity的新输入系统,也就是Input System.相比于旧版的Input Manager,Input System配置更加灵活,而且在跨平台响应输入方面完胜Input Manager.目前Input System还要在Package Manager(Window-Package Manager)中自行下载
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第7张](https://img2.tapimg.com/bbcode/images/d7c7f0156849280c49bf0ce82ac9055d.png)
然后在这个物体的Inspector视图中,添加一个名为“Player Input”的组件
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第8张](https://img2.tapimg.com/bbcode/images/778f0b0e94435607b3c101770faa9487.png)
点开新创建的Input Action(最好创建个新文件夹存储,Assets中的资源都要这样整理,不然后面连想要的资源也找不到),你就得到了这样一个面板
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第9张](https://img2.tapimg.com/bbcode/images/4cb30a5e0e967166e2c7057df39872ff.png)
·Action Maps:可以理解为同一种键位的不同映射。比如空格键,在玩家的操作中是发射子弹,但是在UI的操作中为确认。这两种操作基本不会同时出现,我们只需要在不同的情况下切换不同的Action Map来响应输入就行了。至于单个Action Map就是各种不同Action的集合
·Actions:具体的操作。淡绿色的块是操作类型,蓝色的块是绑定的键的类型,粉红色的块就是具体绑定的键。这个展开讲能说一天,就先把我们要用的讲了。此处使用的Action Type为Value,则当按钮在不同状态下都会有一个值,且同一时间内只会接收一个值的输入。值的类型即是Vector2。
蓝色块的composite type为2D Vector,则会提供四方向的键位。mode为digital normalized,代表值为-1,0,1中数字,根据不同按键的状态不同而不同。
·Action Properties:就是各种Action的属性。相应的还有Binding Properties。
差不多也就这样了,之后有要用到的我都会粗略讲一遍的。
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第10张](https://img2.tapimg.com/bbcode/images/f241cc529c2bcad814730b3a668e2e1b.jpeg)
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第11张](https://img2.tapimg.com/bbcode/images/17bad59d8b482ad5382483c988c57f78.png)
我是习惯把它们全部删掉,然后再加自己的东西。
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第12张](https://img2.tapimg.com/bbcode/images/9cf990db91f217994ba42bb3bad5bd5f.png)
·6:在第六行,你会发现这个类继承了Monobehaviour.所有挂载在物体上的脚本都需要继承于Monobehaviour,且类名与文件名要相同
·8:在类中公有的变量会显示在编译器中。[SerializeField]可以让私有变量显示在编译器中
·16:OnMove()方法会被Unity Event调用。在Input System中,所有被系统自动调用的方法参数列表都需要是InputAction.CallbackContext内容(需要引用UnityEngine.InputSystem命名空间)。这个内容包含了所有你可能需要的参数,方法体中的movement=context.ReadValue<Vector2>();正是利用其中一个泛型方法读取了和移动相关的Vector2数据
·20:因为在按键被按下后上述方法仅会被执行一次,所以需要一个额外方法配合Update来完成按键长按移动的操作
·30:Turn()方法负责让人物转向。我选择把它单独提取出来的原因是我考虑到后期加怪物后人物的朝向还要根据怪物的位置而改变,所以提供一个方法供自身和外界调用
这里面还有一些动画相关的内容,放在下面进行讲解(你已经看完一半枯燥的内容了!坚持就是胜利!)
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第13张](https://img2.tapimg.com/bbcode/images/5e7d4a8923664dbf0b9a9a69b8652d87.jpeg)
人物动画
选中连续的几帧图片一起丢进Scene视图中,你就得到了动画。选好位置存储后,给主角物体再加个组件:Animator
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第14张](https://img2.tapimg.com/bbcode/images/b33282d14e2f9c9475d263ee32afcbad.png)
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第15张](https://img2.tapimg.com/bbcode/images/59521f91248bc85764324b3c5227b432.png)
·Layers:今天用不着就不看了,我也不是很懂,也懒得查(草,摆起来了)
·Parameters:两种状态的过渡(就是上图两个长方形之间的白线)条件参数
·Any State/Entry/Exit:进入状态机后直接从Entry转换到指向的默认状态,Any State就跟它的名字一样,代表任意状态(不是一种状态,是所有状态)。比如从Any State拉一条线到run,条件满足后无论当前是什么状态都会直接到run。状态机从Exit出去后又会从Entry进来
这里我添加了speed作为参数,两种状态就可以基于这个参数进行转换了。还记得那张代码吗?参数speed就是通过animator.SetFloat()进行设置的
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第16张](https://img2.tapimg.com/bbcode/images/0cfbb06d3b6a7f87716fb9db4154a55c.png)
得了,看了那么多枯燥文字,是时候来点演示了。我没有把背景设置成跟原版背景一样的颜色,因为我发现这样会导致人物动画看不清楚。等以后我们把地牢随机生成写完后我再改回来点击链接观看视频如果视频上传没有问题的话,大家应该能看到中间有一段人物行走的方向和动画的方向不一致。这是个bug,在用户斜着走的时候会发生。下期再修了,延续“今天的烂摊子留给明天的我”的传统
![跟着元气学编程【1】:响应用户输入与动画|元气骑士 - 第17张](https://img2.tapimg.com/bbcode/images/8190b7713aa44fc9e659bcd1d1d0afc1.jpeg)