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

发布时间:2023年12月31日

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

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

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

在这里插入图片描述 我们的新敌人 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。
最后,我们检查是否找到了需要避开的激光。如果我们这样做了,我们就会以一半的速度远离它。否则,我们通常只是向下移动。

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

现在正如我们所看到的,当我们向躲避敌人发射激光时,他会不惜一切代价试图避开它。祝你好运!
文章来源:https://blog.csdn.net/qq_37270421/article/details/135309456
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。