Unity:生成敌人有效但它们不可见

问题描述

Unity workspace

我正忙于创建一个需要集成 wave spawner 的学校项目。 目前,我以这个视频为例,并在我的项目中实现。https://www.youtube.com/watch?v=q0SBfDFn2Bs

一切正常,我也得到了调试日志。主要问题是:我看不到我的敌人。 (不是约翰塞纳家伙哈哈,在那种情况下,这将是逻辑;))

我是 Unity 的新手,我喜欢它的界面和工作流程,但我还有很多东西要学。我希望有人可以帮助我! :)

源 WaveSpawner.cs:

using UnityEngine;
using System.Collections;
 
public class WaveSpawner : MonoBehavIoUr 
{
    public enum SpawnState { SPAWNING,WAITING,COUNTING };
 
    [System.Serializable]
    public class Wave
    {
        public string name;
        public Transform enemy;
        public int count;
        public float rate;
    }
 
    public Wave[] waves;
    private int nextWave = 0;
    public int NextWave
    {
        get { return nextWave + 1; }
    }
 
    public Transform[] spawnPoints;
 
    public float timeBetweenWaves = 5f;
    private float waveCountdown;
    public float WaveCountdown
    {
        get { return waveCountdown; }
    }
 
    private float searchCountdown = 1f;
 
    private SpawnState state = SpawnState.COUNTING;
    public SpawnState State
    {
        get { return state; }
    }
 
    void Start()
    {
        if (spawnPoints.Length == 0)
        {
            Debug.LogError("No spawn points referenced.");
        }
 
        waveCountdown = timeBetweenWaves;
    }
 
    void Update()
    {
        if (state == SpawnState.WAITING)
        {
            if (!EnemyIsAlive())
            {
                WaveCompleted();
            }
            else
            {
                return;
            }
        }
 
        if (waveCountdown <= 0)
        {
            if (state != SpawnState.SPAWNING)
            {
                StartCoroutine( SpawnWave ( waves[nextWave] ) );
            }
        }
        else
        {
            waveCountdown -= Time.deltaTime;
        }
    }
 
    void WaveCompleted()
    {
        Debug.Log("Wave Completed!");
 
        state = SpawnState.COUNTING;
        waveCountdown = timeBetweenWaves;
 
        if (nextWave + 1 > waves.Length - 1)
        {
            nextWave = 0;
            Debug.Log("ALL WAVES COMPLETE! Looping...");
        }
        else
        {
            nextWave++;
        }
    }
 
    bool EnemyIsAlive()
    {
        searchCountdown -= Time.deltaTime;
        if (searchCountdown <= 0f)
        {
            searchCountdown = 1f;
            if (GameObject.FindGameObjectWithTag("Enemy") == null)
            {
                return false;
            }
        }
        return true;
    }
 
    IEnumerator SpawnWave(Wave _wave)
    {
        Debug.Log("Spawning Wave: " + _wave.name);
        state = SpawnState.SPAWNING;
 
        for (int i = 0; i < _wave.count; i++)
        {
            SpawnEnemy(_wave.enemy);
            yield return new WaitForSeconds( 1f/_wave.rate );
        }
 
        state = SpawnState.WAITING;
 
        yield break;
    }
 
    void SpawnEnemy(Transform _enemy)
    {
        Debug.Log("Spawning Enemy: " + _enemy.name);
 
        Transform _sp = spawnPoints[ Random.Range (0,spawnPoints.Length) ];
        Instantiate(_enemy,_sp.position,_sp.rotation);
    }
 
}

Unity debug

解决方法

据我所知,你也在改变球棒的 Z 轴位置。通常你不会想在 2D 游戏中这样做,因为它可能会落后于那里正在发生的事情。在代码中,我确实注意到您在世界中使用随机点,因此您需要检查这些点的 Z 位置并将它们更改为 0 或 1。这是您需要更改的 Image积分!希望这会有所帮助!