• 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);
                }
            }





  • 相关阅读:
    2016年3月17日----Javascript的正则表达式
    2016年3月17日----Javascript的时间与日期
    2016年3月9日----Javascript的对象和数组
    2016年3月8日----Javascript的函数
    2016年3月7日----Javascript的运算符
    2016年3月7日----Javascript的数据类型
    2016年3月1日----Javascript的数组元素的添加、移除以及其他常用方法
    console深入理解
    浏览器特性和安全策略
    每日新知
  • 原文地址:https://www.cnblogs.com/caymanlu/p/6361688.html
Copyright © 2020-2023  润新知