楼主:
meowyih (meowyih)
2023-02-22 00:53:52https://youtu.be/7ELGkB7mhDY
上面有人问3D格斗游戏是不是个大坑,
让我一时兴起自己重拾 Blender 和 Godot 做了个小 Project,
并写了这篇文章。
这篇文章是在讲如果想要从零开始,
学会能做出影片中的 3D 格斗游戏的能力,
会用到的技能有哪些。
Skill 1: 能用Blender做3D模型并着色
也就是要做出下面影片中 00:00 秒到 00:20 秒的东西。
https://youtu.be/0H_WLqj0wlA
要学 Blender 的基本操作,
请把下面频道的影片全部看完,
并且自己做一个甜甜圈,
做得出来就够了。
https://www.youtube.com/watch?v=nIoXOplUvAw&list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD
Skill 2: 能用Blender产生并管理3D模型的动画
也就是要做出下面影片中 00:21 秒到 00:50 秒的东西。
https://youtu.be/0H_WLqj0wlA?t=21
要学 Blender 的骨架设定和动画操作,
请把下面的影片“15分钟内学会做会动的蜘蛛”看完并照着做一次,
能理解这“15分钟”(别当真XD) 的内容就够了。
https://www.youtube.com/watch?v=imbIsNAvUpM
Skill 3: Mixamo (非必要,但我的模组和动作是这里下载来的)
https://www.mixamo.com/#/
要做 3D 模组和产生动画很花时间,
我是直接在 mixamo 下载来的,
直接点进去就知道这网站是干嘛用的了。
但这不代表有了 mixamo 就不用学 Skill 1 和 Skill 2 了。
使用 mixamo 产生我这个游戏使用的脚色外型和动作,
需要的步骤是:
a. 下载一个脚色
b. reset scale
c. clear all bones (rigs) and reset to T-pose
d. upload to mixamo and do the auto-rigs
e. download the auto-rig character and use Blender Mixamo add-on to add
control rig.
f. download all the action you need from mixamo (skin is not necessary)
g. use Blender Mixamo add-on to injest all downloaded action into character.
h. remove junk actions and lock (fake link) needed actions
i. stash all needed actions into NLA
j. export to glTF
这些网络上都找的到,
但你不会用 Blender 自己做模型和动画的话,
基本上是做不出来的,
所以该学的还是得学学,不要偷懒。
Skill 4: 学习游戏引擎的基本操作
我用的是目前还没正式开放的 Godot 4.0 RC2,
但不管是用哪个引擎,
把官方范例的“My first 3D game”之类的文件照着写一次就是了。
从范例中一定会学到的东西有:
1. 怎么放一个光源
2. 怎么放一个摄影机
3. 怎么放一个 3D 物件 (要学会放我们从Blender汇出的模组)
4. 怎么知道玩家按了一个钮或一个键盘上的按键
从范例中可能学不到,要自己查的东西有:
5. 如何拨放物件的动画,也就是学会做出下面影片 00:00 秒 - 00:13 秒的游戏(?)
https://youtu.be/ayISrLB96P8
拨放的工具,在 Godot 叫 AnimationPlayer,在 Unity 叫 Animator。
其中,(4) 和 (5) 会需要写几行到十几行左右的程式。
Skill 5: 学习 AnimationTree (Godot) 或 BlendTree (Unity)
上面的影片中,你可以看出来每个动作是完全分离的,
从待机到跑步、从跑步到攻击、从攻击到受击,
动作间就像跳格或瞬移了一样完全没有真实感。
为了修正这问题并将每个动作接起来,
就有了 AnimationTree/BlendTree 这些工具,
以 Godot AnimationTree 来说,设定与效果像这样:
https://youtu.be/ayISrLB96P8?t=17 (00:17 秒到 00:39 秒)
此外,
AnimationTree 除了把二个动作接起来外,
在影片中还有用到把动作加减速、让动作从中间开始接等等的功能,
这是因为默认的物件动画效果不好时 (出拳速度太慢、受击前0.3秒会发呆等等)
就需要用各种工具调整它。
这也是 3D 格斗游戏中非学不可的东西。
Skill 6: HitBox 与 HurtBox
格斗游戏中,每个人物都会有三个“范围”的设定。
1. HurtBox - 被敌人打到会受伤的部位
2. HitBox - 打到敌人会让它受伤的部位
3. Object Area - 就算互相不攻击,人物本体的体积大小。
我的简陋游戏中,完全没做 3,
其结果就是一直往前走就会穿透敌人,跟幽灵一样,
这点请原谅,因为重要的是 HitBox 和 HurtBox。
下面影片中,红色是 HurtBox,绿色是 HitBox。
https://youtu.be/ayISrLB96P8?t=48 (00:48 秒开始)
正常的游戏里,HitBox 要在攻击时才出来,
但我为了将程式码减到最少 (<100行),所以 HitBox 一直存在,
其结果就是影片最后拳头太靠近敌人也算打击到的 Bug。
处理 HitBox/HurtBox 的碰撞侦测“物件”,一定会有二个属性。
在 Godot 中一个叫 Layer,
代表该物件是存在在哪个类别里。
一个叫 Mask,
代表该物件要侦测并告知哪个类别的碰撞事件。
举例来说,
自己的绿色拳头 (HitBox),
打到自己的红色区域 (HurtBox),
二者都不用也不该收到碰撞讯号。
而自己的绿色拳头 (HitBox)、
打到敌人的红色区域 (HurtBox),
敌人的红色区域需要收到碰撞讯号,
但自己的绿色拳头则不用。(没有拳头会受伤之类的设计)
整理起来,如果 Layer 设定是这样
Player HitBox: Layer 1
Player HurtBox: Layer 2
Enemy HitBox: Layer 3
Enemy HurtBox: Layer 4
则:
Player HitBox Mask: none
玩家脚色不用处理拳头被东西碰到的讯号
Player HurtBox Mask: 3
如果位于 Layer 3 的敌人拳头碰到Player HurtBox,
请送讯号给 Player
Enemy HitBox Mask: none
敌方脚色不用处理拳头被东西碰到的讯号
Enemy HurtBox Mask: 1
如果位于 Layer 1 的玩家拳头碰到Enemy HurtBox,
请送讯号给 Enemy
总之整个 HitBox/HurtBox 与碰撞侦测都是在处理和设定这中间的关系,
基本上没什么难度,只是要想清楚而已。
【总结】
Skill 1+2 要学完,大概少说也要个二三十个小时。
Skill 4 如果有程式背景,用引擎学会写 My First 3D Game 大概五到十个小时吧?
Skill 5 基本的 Blend 功能不会花什么时间。
Skill 6 逻辑不难,但写程式要看天分。
所以从零开始,一个月内就够了。
如果要下载我写的这个 Godot 4.0 RC project,我放在这:
https://github.com/meowyih/TestModel
作者: nicetw20xx (哇爱台湾) 2023-02-22 01:31:00
好谢谢大大分享
作者:
enthos (影斯作业系统)
2023-02-22 02:57:00好评 100分
作者: turtleaoc (迎霜) 2023-02-22 09:06:00
感谢
作者:
GaryFu (GaryFu)
2023-02-22 09:07:00感谢分享!!
作者: kyushu (苏打绿吓倒我了) 2023-02-22 11:36:00
赞der
作者:
Mchord (Mchord)
2023-02-22 17:49:00推
作者: coolrobin (泳圈) 2023-02-22 20:52:00
推
作者:
johnny94 (32767)
2023-02-23 10:26:00好猛,推
作者:
fred1541 ((没意义))
2023-02-23 16:14:00哦哦我来笔记!感谢
作者:
sck921 (The Fate)
2023-03-08 13:30:00推分享