| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity2D中实现XY方向角色移动的方法 -> 正文阅读 |
|
[游戏开发]Unity2D中实现XY方向角色移动的方法 |
Unity2D游戏有横轴游戏,也有横纵轴都有的游戏,本文主要使用动画器和混合树进行角色移动,并且可以使得移动后的角色保持面朝该运动方向,适合有一定Unity基础的读者,本文是作者Unity的学习记录类文章,因此难免有错,如果您看到我的错误,还望读者不吝赐教。?一.新建项目,做好准备工作新建一个Unity项目,在文件夹中新建三个文件夹,分别命名为Player,Script,Animation,分别用以储存角色的Sprite,脚本和动画。 将准备好的Unity2D Sprite导入Unity.Player中,并将Sprite模式设置为多个,点击Sprite Editor? 选择 切片---切片---应用 之后我们就能看到已经被智能切片切好的Sprite了。 选择角色的行走动画的第一帧,按住shift,再选择该行走动画的最后一帧,拖入Hierarchy窗口(层级窗口),之后选择保存位置为Animation,分别命名为wwalk,swalk,awalk,dwalk,然后删掉伴生的Animator控制器: ?删除控制器之后: 同时不要忘记删掉层级窗口中多出来的GameObject,只留下第一帧的Sprite,并命名为Player。 ?在Animation文件夹中新建一个动画控制器,并将他拖拽到Player上。 右键任意一个动画,选择在资源管理器中显示。 将四个方向的动画复制粘贴一遍,分别命名为widle,sidle,aidle,didle。 至此,所有准备工作就都做好了。 二.进行动画器的编辑。打开窗口---动画---动画,再打开窗口---动画---动画器。 在动画窗口中点击你刚刚创建好的动画,可以按照自己的喜好编辑walk动画的帧数。 分别选择四个idle动画,将后续的帧全部删除,只保留第一帧,也就是面朝该方向的帧数。 之后我们打开控制器,在层级窗口中点中Player,我们开始编辑动画器 首先,选择默认状态,改名为idle,右键idle,选择创建一个新的BlendTree,然后看到检查器窗口 ?之后,我们在Motion---Blende Tree处右键,并点击,进入混合树编辑页面: 在混合树编辑栏,选择混合类型---2D Freedom Cartesian,在Motion栏新增四个运动域: ?分别将他们的x,y值设置为(1,0),(-1,0),(0,1),(0,-1) 接下来我们在左侧参数页面新增两个参数,分别命名为xinput和yinput: ?在混合树编辑页面中,将Parameters分别设置为xinput和yinput: 按方向分别将四个idle状态拖入motion中的运动栏,之后退出这个状态树: 在编辑器页面右键新建一个状态,或者直接复制idle状态,命名为walk,将walk的动画按照idle的样子设置好。 这时我们需要新建一个bool参数,用以判断是否由站立状态进入行走状态。 将这个bool参数取名为iswalking: ?在idle处右键,选择创建过渡,指向walk,同时walk处也创建一个过渡指向idle。 分别将他们的条件设置为iswalking true 和 iswalking false: 之后我们再在Player处新建一个刚体。(别忘记了) ?到这里我们就完成了动画器的编辑。 三.写入代码?在Script文件夹新建一个C#脚本,并命名为PlayerWalk,将他拖入Player上,双击打开开始编辑。
为了实现运动方向结束时,动画保持在运动方向,我们需要将他和传入movement函数的变量区分开来。因此我分别声明了xmove和xanim,他们分别完成角色运动和动画判定的参数判定。 在写这个脚本时我的思路是获得用户的输入值,将他传入movement函数,这个函数用以给刚体的速度赋值,他取决于speed和用户输入的值,如果角色此时在运动,那么我们就将iswalking设置为true,并且为速度赋值,之后为动画判定变量赋值。 如果角色此时没有在运动,我们同样给速度赋值,但是因为输入为零,此时的速度就是(0,0)。注意,此时我们就不需要再给动画判定赋值了,让他保持原来有的值,就可以实现角色动画面向最后运动的方向。 这样我们就实现了角色在x,y轴上的运动,并且让运动结束时候的动画保留在结束时的最后一帧。 ?如果你有更好的实现方法,或者我的代码需要改进,欢迎在评论区留言,或者直接私信我。 ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 11:43:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |