【Unity植物大战僵尸】僵尸攻击(十一)

本文介绍了Unity中僵尸攻击植物的逻辑实现,包括移动检测、攻击行为以及植物受伤的动画效果。之后对僵尸的攻击逻辑进行了优化,引入有限状态机(FSM)以实现更流畅的游戏流程,包括僵尸的idle、walk、attack和dead四种状态。代码示例详细展示了状态机的运用和状态转换过程。
摘要由CSDN通过智能技术生成

目录

20、僵尸攻击

21、僵尸攻击逻辑优化

测试


20、僵尸攻击

僵尸攻击动画导入
开始在写僵尸攻击的主逻辑,在Zombie.cs中更新代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Zombie : MonoBehaviour
{
    ……
    // 是否在攻击中
    private bool isAttackState;
    // 攻击力
    private float attackValue = 100;
    ……
    /// <summary>
    /// 僵尸移动
    /// </summary>
    private void Move()
    {
        // 没有得到网格,没有僵尸
        if (currGrid == null) return;
        // 如果在攻击中也跳过移动检测
        if (isAttackState) return;
        currGrid = GridManager.instance.GetGridByWorldPos(transform.position);
        // 当前网格中有植物 并且 它在僵尸的左边 且 距离很近
        if (currGrid.HavePlant && currGrid.CurrPlantBase.transform.position.x < transform.position.x
                               && transform.position.x - currGrid.CurrPlantBase.transform.position.x < 0.3f)
        {
            // 开始攻击植物
            Attack(currGrid.CurrPlantBase);
        }
        // -1.33f是一个网格的距离,所以-1.33f*(1/speed)等于每秒走了1.33f*(1/speed)的距离【速度】,然后乘上时间Time.deltaTime,就是每帧走的距离
        transform.Translate(new Vector2(-1.33f,0)*(1/speed)*Time.deltaTime);
    }
    private void Attack(PlantBase plant)
    {
        isAttackState = true;
        // 自身播放攻击动画
        animator.Play("Zombie_Attack");
        // 植物相关逻辑
        StartCoroutine(DoHurt(plant));
    }
    /// <s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~Lomiss~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值