Unity学习笔记八 - Survival Shooter Tutorial

这篇博客介绍了在Unity中实现生存射击游戏的敌人移动和管理。通过`EnemyMovement.cs`,当敌人和玩家都有生命时,敌人将通过NavMeshAgent找到并追踪玩家。在`EnemyManager.cs`中,利用InvokeRepeating定时生成敌人,如果玩家死亡则停止生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后面,刚体、网格导航和动画基础部分可能要单分章节来说,今天继续

EnemyMovement.cs中注释

    void Awake ()
    {
        player = GameObject.FindGameObjectWithTag ("Player").transform;

        playerHealth = player.GetComponent <PlayerHealth> ();
        enemyHealth = GetComponent <EnemyHealth> ();
        nav = GetComponent <NavMeshAgent> ();
    }


    void Update ()
    {
        if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)  //怪物当前血量和玩家当前血量为0
        {
    
            nav.SetDestination (player.position);  //使用enemy上的NavMeshAgent组件在网格导航上把玩家的当前坐标设为移动终点,这是一种unity自打的寻找最短路径的方式
        }
        else
        {
            nav.enabled = false; //跳转到这里,说明玩家或此enemy死亡,把此enemy的NavMeshAgent设为不可用
        }
    }


然后看下EnemyManager.cs中的注释

这里注意,由于空的物体EnemyManager上帮了3个EnemyManager.cs脚本,只是参数不同,所以三个脚本会同时进行

  void Start ()
    {
        InvokeRepeating ("Spawn", spawnTime, spawnTime);  //在开始后的spawnTime后,每隔spawnTime执行Spawn,有点像定时器
    }


    void Spawn ()
    {
        if(playerHealth.currentHealth <= 0f) //如果玩家血量小于0,即已死亡则直接返回,否则执行后面生成怪物的部分
        {
            return;
        }

        int spawnPointIndex = Random.Range (0, spawnPoints.Length); //这里意思是说使spawnPointIndex等于0到spawnPoints.Length(按配置3个脚本中其都等于1)间的整数,断点测试从来都返回了,因而判断Range(min,Max),不会等于Max的值

        Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); //spawnPoints就是我们建立的3个空的坐标点,为一个新的enemy实体体统位置的,初始朝向信息,这句指在位置spawnPoints[spawnPointIndex].position = spawnPoints[0].position ,以spawnPoints[0].rotation的转向,按照enemy变量指向的Prefabs生成一个敌对怪物实体
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值