我目前正在制作像游戏一样的2D游戏太空射击游戏。 我的问题是Loot产卵脚本。如果敌人以快速的速度生成,那么战利品将不会在被摧毁的敌人身上产生,而是会产生其中一个。
用于我所有检测和战利品产生的2个脚本:
public void onDeath(bool isDead)
{
if (isDead == true)
{
if (Random.value <= dropProbability)
{
Instantiate(Loot.transform, Loot.transform.position = Enemy.transform.position, Quaternion.Euler(0, 180, 0));
}
}
}
这个脚本首先接收2个游戏对象是我的战利品,第二个是敌人。 我在敌人的位置上实例化我的战利品。
void Update()
{
if (healthPoints <= 0)
{
if (gameObject.CompareTag("Enemy"))
{
FindObjectOfType<LootSpawn>().onDeath(true);
Destroy(this.gameObject);
}
else
{
Destroy(this.gameObject);
}
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Ammo") != true)
{
if (other.gameObject.tag != this.gameObject.tag)
{
healthPoints--;
if (other.gameObject.CompareTag("Player1") == true)
{
FindObjectOfType<uiElements>().RemoveHealth();
}
}
}
}
这是我用于&#34; ALL&#34;的全局脚本。检测这包括子弹,玩家和敌人。 当每个敌人之间的生成间隔高于2.5秒时,该脚本工作正常 任何更少的东西导致这个问题我附上2个截图,以直观地显示我的问题 Before The Shot, After Shot
最后澄清我想要我的&#34; Loot&#34;永远产生于&#34;被毁坏的&#34;敌人无论在场上有多少敌人,或者他们在场上实例的速度有多快。 没有使我的代码更长,并使其变得混乱 谁能指出我正确的方向?非常感谢。
答案 0 :(得分:0)
本杰明·丹格·约翰逊(Benjamin Danger Johnson)您所说的是正确的,尽管这是一个古老的问题。 我相信您所说的实际上是解决方案。我已经解决了这个问题很久了(现在看来,我觉得如何解决它很奇怪,但是我猜想进步使我们变得更好)。
对于任何人,都有类似的问题。 不要使用FindObjectOfType 用团结的 改为使用GetComponent: https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html