如何解决Unity:生成敌人有效但它们不可见
我正忙于创建一个需要集成 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);
}
}
解决方法
据我所知,你也在改变球棒的 Z 轴位置。通常你不会想在 2D 游戏中这样做,因为它可能会落后于那里正在发生的事情。在代码中,我确实注意到您在世界中使用随机点,因此您需要检查这些点的 Z 位置并将它们更改为 0 或 1。这是您需要更改的 Image积分!希望这会有所帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。