Unity类噩梦城 学习笔记61

Part61:Death of entities(P92)

part1 player:

1:效果和操作

效果:制作player和enemy的,player播放死亡动画,skeleton死亡跳起掉落
操作:设置好死亡animator以及动画进入和跳出的条件Die后,用状态机切换的原理编写PlayerDeadStats,当player的血量不够时,player的Character脚本会运行Die()函数,进而执行Player脚本中的Die(),从而切换状态为死亡

2:代码改变

//新增PlayerDeadState
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerDeadStats : PlayerState
{

    public PlayerDeadStats(Player _player, PlayerStateMachine _stateMachine, string _animBoolName) : base(_player, _stateMachine, _animBoolName)
    {

    }

    public override void Enter()
    {
        base.Enter();
    }
    public override void AnimationFinishTrigger()
    {
        base.AnimationFinishTrigger();
    }
    public override void Exit()
    {
        base.Exit();
    }
    public override void Update()
    {
        base.Update();
        player.SetZeroVelocity();//设置玩家无法移动
    }


}
//修改Player脚本
    public PlayerDeadStats deadStats{get;private set;}
    deadStats=new PlayerDeadStats(this,stateMachine,"Die");
	  public override void Die()
    {
        base.Die();
        stateMachine.ChangeState(deadStats);
    }
//修改PlayerStats脚本
 		protected override void Die()//当Character中出发死亡条件时直接调用此Die即可
    {
        base.Die();
        player.Die();
     }
//修改Entity
		public virtual void Die()
    {

    }
//注意:该Die()在playerdie的实现中的逻辑是 Entity->Player->PlayerStats
3:效果图

在这里插入图片描述

part2 enemy:

1:效果和操作

效果:制作player和enemy的,player播放死亡动画,skeleton死亡跳起掉落
操作:实现方式和player脚本相同,区别在于player播放动画playerDie,skeleton则根据SkeletonDeadState的效果

2:代码改变

//Enemy脚本修改
    public string lastingAnimBoolName { get; private set; }//用于保存最后播放的动画名称
		public virtual void AssignLastAnimName(string _animBoolName)
    {
        lastingAnimBoolName = _animBoolName;
    }
//新增SkeletonDeadState脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SkeletonDeadState : EnemyState
{
    private Enemy_Skeleton enemy;
    public SkeletonDeadState(Enemy _enemyBase, EnemyStateMachine _stateMachine, string _animBoolName, Enemy_Skeleton _enemy) : base(_enemyBase, _stateMachine, _animBoolName)
    {
        this.enemy = _enemy;
    }
    public override void Enter()//当Skeleton死亡时,则播放死亡动画,且将Skeleton的碰撞检测失灵,使其能掉落
    {
        base.Enter();
        enemy.anim.SetBool(enemy.lastingAnimBoolName, true);
        enemy.anim.speed=0;
        enemy.cd.enabled=false;
        stateTimer=.1f;

    }
    public override void Update()
    {
        base.Update();
        if(stateTimer>0){
            rb.velocity=new Vector2(0,10);
          //在死亡状态时,则先小跳,后掉落的常见简易死亡效果
        }
    }
    // Start is called before the first frame update

}
//修改Enemy_Skeleton脚本
    public SkeletonDeadState deadState { get; private set; }
    deadState = new SkeletonDeadState(this, stateMachine, "Idle", this);

//修改EnemyStats脚本
    protected override void Die()
    {
        base.Die();
        enemy.Die();
    }
//修改EnemyState脚本
  public virtual void Exit()
    {
        enemyBase.anim.SetBool(animBoolName, false);
        enemyBase.AssignLastAnimName(animBoolName);//设置为最后推出的动画名称
    }

3:效果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值