Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity C#,2D游戏在选定位置生成战利品_C#_Unity3d_2d_Instantiation - Fatal编程技术网

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

Unity C#,2D游戏在选定位置生成战利品,c#,unity3d,2d,instantiation,C#,Unity3d,2d,Instantiation,我目前正在联合制作2D游戏《太空射手》类游戏。 我的问题是战利品生成脚本。如果敌人快速繁殖,那么战利品将不会在被摧毁的敌人身上繁殖,而是在刚刚繁殖的敌人身上繁殖 用于所有我的探测和战利品生成的2个脚本: public void onDeath(bool isDead) { if (isDead == true) { if (Random.value <= dropProbability) { Instantiate(L

我目前正在联合制作2D游戏《太空射手》类游戏。 我的问题是战利品生成脚本。如果敌人快速繁殖,那么战利品将不会在被摧毁的敌人身上繁殖,而是在刚刚繁殖的敌人身上繁殖

用于所有我的探测和战利品生成的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));
        }
    }
}
public-void-ondath(bool-isDead)
{
如果(isDead==true)
{

如果(Random.valueBenjamin Danger Johnson您所说的是正确的,那么这是一个有一年历史的问题。 我相信你所说的其实是解决问题的办法。我早就解决了这个问题(现在看来,我觉得很奇怪我是如何与之抗争的,呵呵,但我想进步会让我们变得更好)

因为任何人都会有类似的问题。 不要使用FindObjectOfType 使用统一的 取而代之的是GetComponent:
本杰明·约翰逊你说的是对的,但这是一个有一年历史的问题。 我相信你所说的其实是解决问题的办法。我早就解决了这个问题(现在看来,我觉得很奇怪我是如何与之抗争的,呵呵,但我想进步会让我们变得更好)

因为任何人都会有类似的问题。 不要使用FindObjectOfType 使用统一的 取而代之的是GetComponent:

将生成战利品的位置传递给OnDath方法有什么问题吗?您可以调用OnDath(true,transform.position)
实例化(loot.transform,loot.transform.position=敌方.transform.position,四元数.Euler(0,180,0))Enemey在哪里定义?还有,
onDeath(bool isDead)
你可能会认为,如果你调用一个名为OnDed的函数,那么在调用该函数时,敌人总是死的,但是你传递了一个布尔值,表示敌人是否真的死了。出于某种原因,我的坏消息是,当我复制并粘贴
公共游戏对象战利品;公共游戏对象敌人;[Range(0f,1f)]时,它会剪切我的代码公共浮动下降概率=1f;公共bool isDead=false;
敌人只是一个游戏对象。因此,onDead只有在healthPoints达到0时才会触发。至于呼叫,因为每次被呼叫时,敌人都会死亡,所以它只会触发响应我认为你的主要问题来自FindObjectOfType,可能还有你的敌人object(或启动方法).FindObjectOfType是一个非常慢的函数,用于搜索整个场景中的第一个实例,任何实例,即Loot Spawn对象。您可能会意外创建一个实例,并使用此脚本而不是特定于现已死亡的敌人的脚本进行访问。敌人是另一个问题,主要是因为我不知道它的值来自何处OnEnter函数中的ROM。关于这个的更多信息将帮助我更好地追踪这个问题。一目了然,脚本似乎是在不同的固定间隔异步或可能运行的。您可能也想考虑使用协同程序,并且只需提供您需要的所有信息(掠夺产卵位置,掠夺预置)。在as参数中。将生成战利品的位置传递给
onDeath
方法有什么错吗?您可以调用
onDeath(true,transform.position)
实例化(loot.transform,loot.transform.position=敌方.transform.position,四元数.Euler(0,180,0))Enemey在哪里定义?还有,
onDeath(bool isDead)
你可能会认为,如果你调用一个名为OnDed的函数,那么在调用该函数时,敌人总是死的,但是你传递了一个布尔值,表示敌人是否真的死了。出于某种原因,我的坏消息是,当我复制并粘贴
公共游戏对象战利品;公共游戏对象敌人;[Range(0f,1f)]时,它会剪切我的代码公共浮动下降概率=1f;公共bool isDead=false;
敌人只是一个游戏对象。因此,onDead只有在healthPoints达到0时才会触发。至于呼叫,因为每次被呼叫时,敌人都会死亡,所以它只会触发响应我认为你的主要问题来自FindObjectOfType,可能还有你的敌人object(或启动方法).FindObjectOfType是一个非常慢的函数,用于搜索整个场景中的第一个实例,任何实例,即Loot Spawn对象。您可能会意外创建一个实例,并使用此脚本而不是特定于现已死亡的敌人的脚本进行访问。敌人是另一个问题,主要是因为我不知道它的值来自何处OnEnter函数中的ROM。关于这个的更多信息将帮助我更好地追踪这个问题。一目了然,脚本似乎是在不同的固定间隔异步或可能运行的。您可能也想考虑使用协同程序,并且只需提供您需要的所有信息(掠夺产卵位置,掠夺预置)。作为参数。
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();
            }
        }
    }
}