[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第二个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状态中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值