SurvivalShooter学习笔记(四.敌人攻击)

此案例中,敌人始终朝着玩家移动

到达攻击玩家范围时(身上的大的触发器被玩家触发时(敌人靠近玩家,当身上的触发器被触发,且对象是玩家时条件达成))

隔一个时间端,打击玩家一下,对玩家造成伤害,玩家掉血,直至死亡。

变量:

public float timeBetweenAttacks = 0.5f;     // 攻击的间隔
public int attackDamage = 10;               // 攻击的伤害值

bool playerInRange;                         // 玩家是否在敌人攻击范围内
float timer;                                // 计时器,到下次攻击的计时
组件:
Animator anim;                              // 敌人身上动画状态机
GameObject player;                          // 玩家
PlayerHealth playerHealth;                  // 玩家生命脚本
EnemyHealth enemyHealth;                    // 敌人生命脚本

获取组件:

void Awake ()
        {
            player = GameObject.FindGameObjectWithTag ("Player");
            playerHealth = player.GetComponent <PlayerHealth> ();
            enemyHealth = GetComponent<EnemyHealth>();
            anim = GetComponent <Animator> ();
        }

进入触发器:(触发器自带函数)

void OnTriggerEnter (Collider other)
        {
            // 如果是玩家,则表示玩家在敌人攻击范围的变量变为True
            if(other.gameObject == player)
            {
                playerInRange = true;
            }
        }
离开触发器:(触发器自带函数)
void OnTriggerExit (Collider other)
        {
            // 如果是玩家,则表示玩家离开敌人攻击范围的变量变为False
            if(other.gameObject == player)
            {
                playerInRange = false;
            }
        }
在Update中,判断打击玩家的各项条件是否满足,满足则打击玩家

void Update ()
        {
            //从上一次打击完玩家后开始计时;时间到达打击间隔后,开始下一次打击
            timer += Time.deltaTime;

            // 各项条件:“打击冷却了”,“玩家在攻击范围”,“敌人活着”
            if(timer >= timeBetweenAttacks && playerInRange && enemyHealth.currentHealth > 0)
            {
                Attack ();
            }

            //玩家已死,敌人切换状态机到待机
            if(playerHealth.currentHealth <= 0)
            {
                anim.SetTrigger ("PlayerDead");
            }
        }
此动画参数类型为:Trigger类型

攻击函数:

 void Attack ()
        {
            //攻击完重新开始计时冷却
            timer = 0f;

            // 玩家还活着,给予伤害
            if(playerHealth.currentHealth > 0)
            {
                playerHealth.TakeDamage (attackDamage);
            }
        }





转载于:https://www.cnblogs.com/caymanlu/p/6361688.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值