游戏开发小结——敌人躲避射击

游戏开发小结——敌人躲避射击

目标:学习如何实现一个新的敌人,试图避免被玩家的射击击中。

再次有一个新的敌人想法供我们尝试。让我们创建一种新的敌人类型,当我们向他开火时,这个敌人将尝试避免被我们的激光击中。

在这里插入图片描述 我们的新敌人 sprite。

首先,我们必须确保我们的新敌人类型存在于我们的游戏中。
private enum EnemyType
{
   
    Default,
    Zigzag,
    Aggressive,
    Smart,
    Evasive
}
由于这个敌人会寻找我们玩家的激光,我们必须确保我们的 SpawnManager 和激光容器中的所有内容都已设置好。
[SerializeField] private GameObject _playerLaserContainer;
public GameObject PlayerLaserContainer => _playerLaserContainer;
我们所做的就是创建保存容器的变量,并确保容器是的公开publicle,并且我们通过使用属性来做到这一点。
现在我们讨论敌人如何检测和躲避我们的激光。
private float _avoidDistance = 3.0f;
private void CalculateMovement()
{
   
  switch (_type)
  {
   
    //other cases
    case EnemyType.Evasive:
        Vector3 _enemyMoveDirection = Vector3.down;
        bool _foundLaser = false;
        LaserBehaviour[] _trackLasers = SpawnManager.Instance.PlayerLaserContainer.GetComponentsInChildren<LaserBehaviour>();

        for (int i = 0; i < _trackLasers.Length; i++)
        {
   
            if (_trackLasers[i] != null && _trackLasers[i].gameObject != null && _trackLasers[i].gameObject.activeSelf)
            {
   
                Vector3 _directionToLaser = _trackLasers[i].transform.position - transform.position;

                if (Mathf.Abs(_directionToLaser.magnitude) < _avoidDistance)
                {
   
                    _enemyMoveDirection = -_directionToLaser;
                    _foundLaser = true;
                }
            }
        }
        if(_foundLaser)
            transform.Translate(_enemySpeed / 2f * Time.deltaTime * _enemyMoveDirection);
        else
            transform.Translate(_enemySpeed * Time.deltaTime * _enemyMoveDirection);
        break;
    default:
        break;
  }

  TeleportNewPosition();
}
让我们分解一下我们在这里所做的一切:
_enemyMoveDirection:我们创建一个 Vector3.down,表示它默认应该向下移动,以防找不到激光。
_foundLaser:这是我们的布尔值,用于指示是否已找到激光。如果没有,我们将正常向下移动。
_trackLasers:这是我们的变量,它保存在我们的 Singleton 类 SpawnManager 的容器中找到的所有激光器的数组。
然后我们循环遍历数组中的所有项目,并检查它们是否不为空并且在场景中处于活动状态。
_directionToLaser:计算从敌人到激光的方向。
然后我们检查到激光的距离是否在指定的 _avoidDistance 范围内。
如果到激光的距离在指定的 _avoidDistance 范围内,它会更新我们的 _enemyMoveDirection 以远离激光并将 _foundLaser 设置为 true。
最后,我们检查是否找到了需要避开的激光。如果我们这样做了,我们就会以一半的速度远离它。否则,我们通常只是向下移动。

在这里插入图片描述我们的敌人试图躲避我们的激光。

现在正如我们所看到的,当我们向躲避敌人发射激光时,他会不惜一切代价试图避开它。祝你好运!

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-31 23:04:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-31 23:04:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-31 23:04:01       82 阅读
  4. Python语言-面向对象

    2023-12-31 23:04:01       91 阅读

热门阅读

  1. 【C++设计模式 -- 单例(Singleton)模式】

    2023-12-31 23:04:01       51 阅读
  2. 2023年度总结

    2023-12-31 23:04:01       63 阅读
  3. pycharm配置pyqt5的ui文件转py文件的小工具

    2023-12-31 23:04:01       63 阅读
  4. vue +WebSDK_V3.3.0

    2023-12-31 23:04:01       59 阅读
  5. 什么是Mustache

    2023-12-31 23:04:01       61 阅读
  6. 【MyBatis-Plus】内置接口的使用之CRUD

    2023-12-31 23:04:01       63 阅读
  7. DDD系列 - 第8讲 仓库Repository - JPA篇(二)

    2023-12-31 23:04:01       57 阅读