Unity C#,2D游戏在选定位置产生战利品

时间:2017-07-28 12:57:29

标签: c# unity3d 2d instantiation

我目前正在制作像游戏一样的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 ShotAfter Shot

最后澄清我想要我的&#34; Loot&#34;永远产生于&#34;被毁坏的&#34;敌人无论在场上有多少敌人,或者他们在场上实例的速度有多快。 没有使我的代码更长,并使其变得混乱 谁能指出我正确的方向?非常感谢。

1 个答案:

答案 0 :(得分:0)

本杰明·丹格·约翰逊(Benjamin Danger Johnson)您所说的是正确的,尽管这是一个古老的问题。 我相信您所说的实际上是解决方案。我已经解决了这个问题很久了(现在看来,我觉得如何解决它很奇怪,但是我猜想进步使我们变得更好)。

对于任何人,都有类似的问题。 不要使用FindObjectOfType 用团结的 改为使用GetComponent: https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html