关闭

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

415人阅读 评论(0) 收藏 举报
分类:

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

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

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

变量:

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





0
0
查看评论

SurvivalShooter学习笔记(八.敌人管理器)

敌人管理器:管理敌人的随机出生点创建 在场景中建立几个空物体,作为敌人的出生点 public class EnemyManager : MonoBehaviour { public PlayerHealth playerHealth; // 玩家生命脚本 ...
  • qq_33337811
  • qq_33337811
  • 2017-01-04 14:23
  • 455

SurvivalShooter学习笔记(三.敌人移动)

1.敌人和玩家若存活,敌人始终朝着玩家所在位置移动,所以要给玩家物体一个Tag:Player从而找到玩家 2.敌人的自动寻路使用Unity自带的NavMeshAgent寻路组件寻路,要先把场景中不动的物体勾选Static,然后Navigation-Bake烘焙 移动 代码如下: ...
  • qq_33337811
  • qq_33337811
  • 2017-01-03 14:05
  • 753

SurvivalShooter学习笔记(五.敌人生命)

敌人生命系统(受伤 死亡) 敌人生成后有初始生命,被攻击受伤有打击特效,降低生命值,直至死亡; 死亡后怪物:播放死亡音效,动画,然后下沉地表,销毁;玩家:得到相应分数。 敌人生命脚本如下: 1.变量: public int startingHealth = 100; //...
  • qq_33337811
  • qq_33337811
  • 2017-01-03 18:21
  • 515

Unity中使用委托 代理 实现敌人自动检测目标并攻击

假如有一个类控制着游戏中某个关卡的敌人。所有敌人都有一个特点:只要敌人发现玩家了,它就会追赶玩家。最重要的是其他敌人会被通知到玩家的位置,并且也开始追赶玩家。 所以实现这个类应该向下面这样写。 using UnityEngine; using System.Collections; ...
  • zjw1349547081
  • zjw1349547081
  • 2016-12-15 17:53
  • 1205

Unity3D开发敌人自动攻击和自动寻路

简介:当制作动作类攻击游戏时,会用到敌人的自动攻击及自动寻找攻击目标,如何实现自动攻击和自动寻路呢?下面简单的讲解我对这方面的理解。 当你已经导入了敌人的模型并制作好了敌人动画控制状态机,接下来肯定会想让敌人具备攻击和寻找目标的能力,要开发这一功能,其实只需要做两件事情: 第一:...
  • moonhot537
  • moonhot537
  • 2016-05-24 11:09
  • 5257

实现敌人(怪物)的简单AI(自动巡逻、看到玩家攻击玩家、玩家离开恢复自动巡逻)

 using UnityEngine; using UnityEngine.AI; /// /// 敌人自动巡逻 /// public class EnemyMove : MonoBehaviour {     //导航系统  ...
  • Libiao_Li
  • Libiao_Li
  • 2017-06-23 09:41
  • 388

Unity3d即时战斗之敌人AI和角色攻击

角色控制脚本Character.cs,为角色添加角色控制器Character controller。 using UnityEngine; using System.Collections; public class Character : MonoBehaviour { float att...
  • u014725878
  • u014725878
  • 2016-05-23 14:55
  • 5811

噩梦系列篇之Playe攻击敌人与敌人声音播放完成

现在敌人的collider和rigidbody都有了,说明可以发生碰撞了,下面就用player攻击敌人。 首先给敌人加一个脚本;enemyhealth(); using UnityEngine; using System.Collections; public class enemyhealt...
  • alayeshi
  • alayeshi
  • 2015-04-13 11:24
  • 473

【Unity3D 打斗游戏开发】之一 普通攻击敌人判断

记录下关于打斗类(如:ARPG类,并非格斗类)游戏的攻击判定问题,通常这类游戏都会有普通攻击和技能攻击等攻击方式(可参考王者荣耀),下面将分别介绍下。         一、普通攻击     ...
  • chy_xfn
  • chy_xfn
  • 2016-09-12 12:10
  • 6473

C#基础-041 设计一个玩家类,一个敌人类, 玩家可以攻击敌人,敌人可以攻击玩家,攻击点合理设计,可以通过随机数产生,模拟战斗过程

敌人类: class Enemy { private string EnemyName; private double Blood=300; public Enemy() { } public Ene...
  • qq_23680543
  • qq_23680543
  • 2017-09-01 09:12
  • 144
    个人资料
    • 访问:89609次
    • 积分:1620
    • 等级:
    • 排名:千里之外
    • 原创:57篇
    • 转载:110篇
    • 译文:1篇
    • 评论:6条
    最新评论