提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、制作游戏第二个BOSS燥郁的毛里克
- 1.导入素材和制作相关动画
- 1.5处理玩家受到战吼相关行为逻辑处理
- 2.制作相应的行为控制和生命系统管理
- 3.制作战斗场景和战斗门
- 4.制作BOSS死亡行为
- 总结
前言
hello大家好久没见,之所以隔了这么久才更新并不是因为我又放弃了这个项目,而是接下来要制作的工作太忙碌了,每次我都花了很长的时间解决完一个部分,然后就没力气打开CSDN写文章就直接睡觉去了,现在终于有时间整理下我这半个月都做了什么内容
废话少说,接下来我将介绍我做的第二个BOSS苍蝇之母,因为我上一期制作的苍蝇之母反响还不错,大晚上的还有一百来人在看,那么直接乘胜追击制作第二个BOSS燥郁的毛里克。
另外,我的Github已经更新了,想要查看最新的内容话请到我的Github主页下载工程吧:
GitHub - ForestDango/Hollow-Knight-Demo: A new Hollow Knight Demo after 2 years!
一、制作游戏第二个BOSS燥郁的毛里克
1.导入素材和制作相关动画
还是先制作好tk2dsprite和tk2dspriteanimator吧:
可能你已经注意到了,提供的tk2dsprite有毛里克的不同躯干,没错,我们要做的就是类似于骨骼动画一样的,每一个部分处理对应部分的行为,在这里我们分为四个部分:分别是左右手臂,嘴巴,身体,先来制作隐藏状态下的动画:
然后是手臂:
身体方面的动画:
头部动画:
还有就是作为整体的跳跃动画:
作为整体的喷射子弹动画:
作为整体的战吼动画:
死亡动画;
1.5处理玩家受到战吼相关行为逻辑处理
可能你看到这标题不知道我想表达什么,其实这也是我自己打这个BOSS的时候突然发现的,就是玩家在面临强大的BOSS时,会被BOSS的气场给震住,被迫失去控制的朝向BOSS,然后BOSS发射阵阵战吼冲击波,其实你看到下图小骑士的动画你就明白是什么了:
然后给小骑士一个playmakerFSM叫“Roar Lock”来实现相关行为:
初始阶段找到特效文件夹和里面需要的特效:
通过Tag名字叫 Roar的判断是否进入下一个状态
判断是否允许进入Roar行为:
玩家锁定状态下,发送事件,同时RelinquishControl取消控制以及AffectedByGravity受到重力影响,停止播放其他动画,使玩家朝向敌人
自定义playmakerFSM脚本:
using System;
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Logic)]
[Tooltip("Tests if all the given Bool Variables are are equal to thier Bool States.")]
public class BoolTestMulti : FsmStateAction
{
[RequiredField]
[UIHint(UIHint.Variable)]
[Tooltip("This must be the same number used for Bool States.")]
public FsmBool[] boolVariables;
[RequiredField]
[Tooltip("This must be the same number used for Bool Variables.")]
public FsmBool[] boolStates;
public FsmEvent trueEvent;
public FsmEvent falseEvent;
[UIHint(UIHint.Variable)]
public FsmBool storeResult;
public bool everyFrame;
public override void Reset()
{
boolVariables = null;
boolStates = null;
trueEvent = null;
falseEvent = null;
storeResult = null;
everyFrame = false;
}
public override void OnEnter()
{
DoAllTrue();
if (!everyFrame)
{
Finish();
}
}
public override void OnUpdate()
{
DoAllTrue();
}
private void DoAllTrue()
{
if (boolVariables.Length == 0 || boolStates.Length == 0)
{
return;
}
if (boolVariables.Length != boolStates.Length)
{
return;
}
bool flag = true;
for (int i = 0; i < boolVariables.Length; i++)
{
if(boolVariables[i].Value != boolStates[i].Value)
{
flag = false;
break;
}
}
storeResult.Value = flag;
if (flag)
{
Fsm.Event(trueEvent);
return;
}
Fsm.Event(falseEvent);
}
}
}
看看是否要翻转玩家X方向:
处理粒子系统相关:
判断玩家是否在地面:
在空中锁定:
在地面被锁定:
等待发送ROAR EXIT事件:玩家重新获得输入和动画控制
取消粒子播放效果:回到Detect状态中。