基本信息:
- Unity版本 5.0.3
- 实现方式:C++完成游戏操作,蓝图只制作了有限动画状态机
- 动画方式:有限状态机
- 游戏流程:较为完整
游戏背景:
当风吹过海岸,娇艳的花儿在河流旁盛开
银火虫在草坪上四散飞舞,近在咫尺的彩虹从河流延伸到天边…
这样梦一般的场景,你是否会想要跳舞一曲?
游戏操作:
QWEADZXC,共八个方位的舞步,点击即可做出相应动作。
游戏目标:
音游!音游!我们是!没有音乐(划掉)的音游!
跟随律动的音符和屏幕上的提示,做出对应舞步!
我具体都做了什么?
-
制作了可以交互的主菜单
-
编写AnimInstanced的子类Dance.cpp,在Dance.h声明八个案件的布尔值变量
-
从Dance继承,制作AnimBP,在蓝图中访问Dance.h中的变量,并对应制作有限动画状态机
-
编写MyActor脚本,编写具体游戏逻辑
技术难点
- 我是真的找不到UE5的资料。
- 我该如何在C++代码中设置来自[AnimInterscence]继承给[AnimBluePrint]里的变量?
- 所有找到的代码和解决方案都是UE4的,麻了。
- 我做了很多尝试,诸如通过路径直接获取蓝图类、手动赋值蓝图类、利用反射获取蓝图里的变量的名字。但是这些方式都无法实现,要不然是某些UE4的API和写法已经更新,要不然是我根本不知道他这个教程写的是啥意思。我觉得国外的很多开发者需要重新接受小学语文教育。
- 而且还有很多莫名其妙的bug,比如GENERATED_CLASS_BODY()的报错到现在我还不知道为啥,最后万能的VSstudio自动帮我改成了GENERATED_BODY(),并在函数前面加了BO2_API的字段。
- 然后,重新编译,开始运行,BOOOOOM!崩溃了。restart之后,我就看到了今生最难忘的提示之一:该蓝图已损坏。
- 代码崩溃还能损坏蓝图???这不光不科学,还不玄幻。
- 而且还有一些崩溃的报错,比如[Assertion failed: Pair != nullptr [File:D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Containers\Map.h] [Line: 656]],这玩意我知道出现了空指针,但是我的好哥哥,你能提示我一下指针出现在哪里吗?
- 而且而且,有的时候UE5自己会有一些莫名其妙的bug,比如Crtl+Alt+F11显示编译成功啦!然后一看啥都没干。(解决方案居然是关掉引擎,在VS里编译一遍??)
- 我真的讨厌debug。主要是讨厌网上一点资料没有,或者奇奇怪怪的bug。
- 就在刚刚,我的Tick函数没有被触发,而统一代码中的begin是正常触发的。
if (!Animation) {
UE_LOG(LogTemp, Warning, TEXT("my Animation is empty")); return; ;
}
Animation->Key_E = true;
UE_LOG(LogTemp, Warning, TEXT("my Animation isnot empty, set Key_E"));
比如你看这里,这是Tick里的,但是这俩log硬是一个都没打印出来...行,那我估计这个代码根本就没运行到,但是、begin里的log还tm能打印出来。。。这不离谱?不离谱?不离谱?
12.做到最后,音乐和节拍功能没有实现,只是做了一个简简单单的C状态机切换。但是我所有的代码都是C完成的。
我都用了些什么?
- Jeremie Passerin 开发的BungeeMan骨骼动画,啥也没用,看看了它的实现方式
- Sandvector Studios 开发的Cartoon Water Shader材质,应用了其环境
- MoCap Online 开发的Ninja Starter - MoCap Pack实例,应用了其骨骼动作(已付费购买)
游戏工程:【 [工程文件](www.fengjx.cn/Bo2.rar)】
视频链接:【 [游戏视频](www.fengjx.cn/vedio.mp4)】