ue3d使用Unity框架制作Spawn Manager

使用Unity框架制作Spawn Manager

分类:
ue3d - 使用Unity框架制作Spawn Manager

要在 Unity 中实现此内容,那么在操作前,请删除场景中的 AI,并在删除之前将其转换为预制件。

完成必要的工作之后,接着3D天堂将创建 Spawn Manager 脚本并将其附加到 Spawn Manager 游戏对象。

如下所示:

ue3d - 使用Unity框架制作Spawn Manager

转到 Spawn Manager 并创建名为 _instance 的 Spawn Manager 类的静态变量。

如下所示:

public class SpawnManager : MonoBehaviour
{
    private static SpawnManager  instance;
}

接着创建一个名为 Instance 的 Spawn Manager 变量的静态公共属性,并使用大写字母。

private static SpawnManager  instance;
{

}

这里还需要获取上述属性中的 _instance,使用 get 访问器执行此操作,然后需要检查 _instance 是否为 null。

如果它是 null 则抛出一个错误或者不是则返回实例。

public class SpawnManager : MonoBehaviour
{
    private static SpawnManager _instance;
    public static SpawnManager Instance
    {
      get
      {
          if (_instance == null)
          {
              Debug.Log("SpawnManager is Null:");
          }

          return _instance;
      }
   }
}

在这一步中需要初始化实例,在 Awake 方法中这样做,当场景加载时,说实例等于附加到这个游戏对象的这个脚本。

如下所示:

private void Awake()
{
    _instance = this;
}

接着创建一个名为 AIPrefab 的 AI 预制件并将其序列化,以便能够在检查器中拖放 ai。

如下所示:

[SerializeField]
private GameObject _aiPrefab;

每 5 秒创建一个协程并实例化 AI。

private IEnumerator SpawnAIRoutine()
{
    Instantiate(_aiPrefab,transform.position,Quaternion.identity);
    yield return new WaitForSeconds(5f);
}

现在创建一个名为 SpawnEnemy 的公共方法,然后在那里创建一个名为 SpawnAIRoutine 的 startCoroutine。

public void SpawnEnemy()
{
    StartCoroutine(SpawnAIRoutine());
}

为确保 AI 在第一个路径点生成,请创建一个转换变量并将其序列化。当实例化 ai 时,它会使 ai 在生成点位置实例化。

如下所示:

[serializeField]
private Transform _spawnPoint;

public static SpawnManager Instance
{
    get
    {
       if (_instance == null)
       {
           Debug.Log("SpawnManager is Nul1:");
       }

       return _instance;
    }
}

private void Awake()
{
    _instance = this;
}

private IEnumerator SpawnAIRoutine()
{
    Instantiate(_aiPrefab,_spawnPoint.position, Quaternion.identity);
    yield return new WaitForSeconds(5f);
}

转到 AI 脚本并在更新方法中调用此函数。

void update()
{
    SpawnManager. Instance.SpawnEnemy();
}

最好的做法是在 Unity 游戏管理器中调用这个方法,这样做是因为如果杀死第一个 AI,这个 AI 在项目文件夹中,下一个 AI 不会在下一帧实例化,所以调用此方法以确保始终实例化 AI 是最佳做法。

public class GameManager : MonoBehaviour
{
    private static GameNanager _instance;
    public static GameManager Instance
    {
        get
        {
            if (_instance == null)
            {
                Debug.LogError("Game Manager is Null");
            }
            return _instance;
        }
    }
  

    private void Awake()
    {
         _instance = this;
    }
  

    private void Update()
    {
        SpawnManager.Instance.SpawnEnemy();
    }
}

但…这样做是行不通的,因此要解决此重复问题,将生成点 A 重命名为生成位置,然后获取生成点 A 和 J,然后将它们拖放到 AI 中。然后在选择 AI 时将第一个和最后一个航路点添加到检查器中。

注意:如果用了很多出生点,把它们全部拿走,这里只用了 A 和 J。

ue3d - 使用Unity框架制作Spawn Manager

但是这样玩会出现一个问题,因为每帧会生成 1 个敌人,所以你的 PC 每秒运行 60 帧,将有 60 个敌人。

要解决这个问题,可以创建一个名为 isAIspawned 的 bool 变量,然后转到 SpawnAIRoutine,在实例化后将 bool 设置为 true,然后在等待 5 秒后将其设置为 false。

如下所示:

private bool _isAISpawned;
private IEnumerator SpawnAIRoutine()
{
    Instantiate(_aiPrefab,_spawnPoint.position,_spawnPoint.rotation);
    _isAISpawned = true;
    yield return new waitForSeconds(5f);
    _isAISpawned = false;
}

最后转到 SpawEnemy 方法中的 Spawn Manager 脚本,检查 isAISpawned 变量是否等于 false 然后 StartCoroutine “SpawnAIRoutine”。

public void SpawnEnemy()
{
    if (_isAISpawned ==false)
    {
        StartCoroutine(SpawnAIRoutine());
    }
}

下面是3D天堂制作的最终结果,一起看看效果。

ue3d - 使用Unity框架制作Spawn Manager

以上是关于框架下制作Spawn Manager的全部内容,如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:629
  • 字符:3999
  • 适用软件:Unity
  • 说明:无
  • 编号:150314

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!