unity3d 为什么我按播放时每帧都显示此错误?

vhmi4jdf  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(183)

所以我为我的游戏做了一个产卵系统,我有两个列表,敌人和产卵点。奇怪的是,当我引用enemiedata来获取产卵之间的时间时,它给了我这个错误
参数异常:GetComponent要求请求的组件"EnemieData"派生自MonoBehaviour或Component或者是接口。
(enemiedata是可编写脚本的对象)
下面是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemieSpawn : MonoBehaviour
{
    //If your game is not Procedurally Generated just drag and drop your spawn points onto this list.
    public List<Transform> spawnPoints;
    public List<GameObject> enemies;
    public bool spawn;
    public float timeSinceLastSpawn;

    public void Update()
    {
        timeSinceLastSpawn += Time.deltaTime;

        if (spawn == true)
        {
            foreach(GameObject enemie in enemies)
            {
                foreach (Transform spawn in spawnPoints)
                {
                    EnemieData enemiedata = enemie.GetComponent<EnemieData>();

                    if (enemiedata.spawnrate >= timeSinceLastSpawn)
                    {
                        SpawnEnemy(spawn, enemie);
                    }
                }

                timeSinceLastSpawn = 0;
            }
        }
    }

    //Method to spawn your enemy at a given point.
    public void SpawnEnemy(Transform spawnPoint, GameObject enemies)
    {
        Instantiate(enemies, spawnPoint.position, spawnPoint.rotation);
    }
}
9avjhtql

9avjhtql1#

你基本上已经回答了你自己的问题,为什么会发生这种情况。但是,为了纠正这个问题,你必须有一个组件,你可以附加到你的敌人游戏对象,其中包括EnemieData。
一个可能的解决方案可能如下所示:

public class Enemy : MonoBehaviour
{
    public EnemieData enemyData;
}

然后在你的敌人spawner中,你可以修改你现有的代码:

if (enemie.TryGetComponent<Enemy>(out var e))
{
    if (e.enemyData.spawnrate >= timeSinceLastSpawn)
        SpawnEnemy(spawn, enemie);
}

相关问题