我是c#的新手,我遇到了我的敵人生成器的問題。我正在制作一個無盡的自上而下的射擊游戲,在產生了20個敵人并被摧毀后,敵人就不再出現了。但我的分數計數器仍在繼續增加,這讓我相信他們正以某種方式被摧毀。
這里是敵人產卵控制器:
void Update()
{
if (!spwningObject && GameController.EnemyCount < spawnSettings[0] .maxObjects)
{
spawningObject = true;
float pick = Random.value * totalWeight;
int chosenIndex = 0;
float cumulativeWeight = enemySpawnables[0].weight。
while(pick > cumulativeWeight & & chosenIndex < enemySpawnables.Count - 1)
{
chosenIndex ;
cumulativeWeight = enemySpawnables[chosenIndex].weight。
}
StartCoroutine(SpawnObject(enemySpawnables[chosenIndex].type, Random.Range(spwnSettings[0].minWait / GameController.DifficultyMultiplier, spawnSettings[0].maxWait / GameController.DifficultyMultiplier))。
再生()。
}
}
private IEnumerator SpawnObject(string type。float time)。
{
yield return new WaitForSeconds(time)。
randomSpawnPoint = Random.Range(0, enemySpawners.Length)。
randomEnemy = Random.Range(0, enemy.Length);
enemyPool.SpawnObject(enemySpawners[randomSpawnPoint].position, transform.rotation)。
spawningObject = false;
GameController.EnemyCount ;
而這里是敵人的控制器(附在敵人的預制件上):
public void Start()
{
myRB = GetComponent<Rigidbody>()。
player = FindObjectOfType<PlayerController>()。
}
private void OnEnable()
{
player = FindObjectOfType<PlayerController>()。
}
void Update()
{
if (health <= 0)
{
死亡()。
}
}
void FixedUpdate()
{
transform.LookAt(player.transform.position)。
myRB.速度=(transform.forward * moveSpeed)。
//Falling
if(myRB.velocity.y < 0)
{
myRB.velocity = Vector3.up * Physics.gravity.y * (fallMultiplier - 1) * Time.deltaTime;
}
}
public void Die()
{
print("Enemy" this.gameObject.name " 已經死亡!")。
EnemySpawn.instance.enemyPool.ReturnObject(this.gameObject)。
player.GetComponent<PlayerController>().point = pointsToGive;
ScoreController.scoreValue = 1;
}
唯一應該影響敵人健康的東西是子彈。這里是子彈控制器中影響敵人健康的部分:
public void OnTriggerEnter(Collider other)。
{
if(other.tag == "Enemy"/span>)
{
triggeringEnemy = other.gameObject;
triggeringEnemy.GetComponent<EnemyController>().health -= damage;
PlayerController.instance.bulletPool.ReturnObject(gameObject)。
}
}
這個問題總是在產生/摧毀了20個敵人,并達到20分之后發生。在此之前,敵人的移動是正常的,一切似乎都在正常作業。這很可能是我遺漏了一些非常簡單的東西,但我希望得到任何幫助!
uj5u.com熱心網友回復:
你好,我想問題出在這里。
在你的IEnumerator SpawnObject中你增加了GameController.EnemyCount ;。 但當敵人死亡()時,你沒有減少GameController.EnemyCount,所以當它達到你的spawnSettings[0].maxObjects時,它只是停止產生另一個敵人。
你應該在敵人Die()中加入GameController.EnemyCount--;。
uj5u.com熱心網友回復:
當你犯了邏輯錯誤時,找到它的好方法是Visual Studio除錯。 這里有一篇關于整個程序的官方文章--https://docs.unity3d.com/Manual/ManagedCodeDebugging.html.
。我將在Update方法的開始處設定斷點,看看EnemyCount是否隨著時間的推移而增加,然后你就會明白你忘了做減法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/312681.html
標籤:
上一篇:事件動作在狀態模式中不起作用
