【问题标题】:Unity: spawning enemies works but they are not visible团结:产生敌人有效,但他们不可见
【发布时间】:2021-03-08 03:49:54
【问题描述】:

我正忙于创建一个需要集成波浪生成器的学校项目。 目前,我以这个视频为例,并在我的项目中实现了它。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);
    }
 
}

【问题讨论】:

  • 听起来你的2D Layer Sorting有问题
  • 嘿@derHugo 我在 7 上获得了图层作为玩家精灵。所以玩家是可见的,而蝙蝠不可见。
  • 在您发布的图片中,我可以看到蝙蝠...应该还有别的吗?

标签: unity3d game-development


【解决方案1】:

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

【讨论】:

  • 你好朋友,我把它改成了0和1,但还是不行。它仍然提供调试,但我没有看到它们。
猜你喜欢
  • 1970-01-01
  • 2022-11-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多