基于Unity用C#实现的3D游戏动作系统

前言

     

在unity中用C#实现3d游戏的动作系统操作框架,包含移动,冲刺,跳跃,待机等。

主要的思路就是状态机,通过按键输入,使角色模型进入对应状态,在相对应的状态中,进行位移、交互、动画等等行动,通过这种逻辑实现动作系统。

比如wasd键就进入移动状态,在这个状态中,就是按方向进行移动,持续的按按键,就持续的保持这个状态。在这个状态中,按空格就切换到跳跃状态跳跃一次。
在每个状态机执行的过程中,只有允许切换的时间点按下转换到其他状态的按键才会切换。
好处就是,可以预防按键冲突,不会出现那种左脚踩右脚前进又上天的状态。
同时,添加新的状态,比如飞行、滑翔、游泳或者连招,只用新加状态,然后在状态内增加动画和操作即可,相对比较独立,操作起来也比较方便。

主要是学习了youtube上Indie Wafflus 老哥的思路,所以这一篇文章,也可以看作是我学习成果的整理。 

实现逻辑

插件准备

在准备阶段,首先要。在unity中提前加载好Input Actions插件,这个插件用来处理键盘输入,从而实现键盘控制。

模型与动画

然后是模型准备和对应不同状态的动画准备。这里推荐直接去mixamo官网上下载已经做好的动画与模型,有其他的模型或者动作动画也行。
下载的时候格式一定是FBX for unity

代码

代码分类

基本上就是相机,人物,数据,状态机,再加个公用
5个大类。不过相机人物和功用主要是实现其他功能的,关于状态机,最基础的代码只需要两大类State和Data。

最基础的代码文件分两大类:
一个是State,一个是Data。
每个状态基本上要包含一个State和一个Data,分别对应着,进入这个状态之后所要进行的操作,和所需要的一些数据。

如下图

状态


最上层的是接地状态和空中状态
之后可能会加个水中状态,搓招的话也会在这一层再加一个招式状态。
 

接地状态

接地状态下的移动状态

接地状态下的停止状态

这是一个中间状态,做停止动作,从而过渡到待机状态。

着路状态,从高处落下、落地,用于从空中状态落地过渡到待机状态。

空中状态,主要是跳跃和坠落。

没做滑翔,但是滑翔的实现逻辑很简单,控制它降落的那个y轴的速度,让它在垂直轴上降的很慢,同时允许它前后左右移动空中转换视角等,再加上飞行的动画,就可以完成。

水中状态

也没有做水中状态,但是水中状态的实现逻辑也很简单,就是让角色的碰撞胶囊能检测出水碰撞层,只要检测到,就控制它的y轴悬浮,在垂直轴上保持不动,除非使用上下键进行调整。这样就可以实现在水中的漂浮,或者是在水中上下潜水。

招式状态

同样的逻辑招式状态也很简单。
按住对应的按键,进入招式状态,在状态中导入相应的动画特效镜头视角转换,和与外界环境的交互,还有伤害判定需求。

随手录了个展示视频:

随手录的Unity学习成果留档

结语

大体上就是这个逻辑,具体的代码文件我挂到github上

https://github.com/kunchenghanbao/movementSystem

因为是第1次做这么系统的东西,所以会有很多不足,而且有很多想法,想继续加进去扩展出来,所以等学习深入之后,我会继续进行修改和优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值