从新的敌人遭遇中获取GameObject

时间:2018-08-29 04:09:56

标签: c# unity3d

在每次新的相遇中,如何从敌人那里取回游戏对象?这不是我可以插入Unity检查器的东西。我没有编写任何代码,因为我不知道从哪里开始。到目前为止,我认为:

我需要一个可以存储游戏对象的变量,但是当遇到多个敌人时会发生什么?

 GameObject getEnemy;

我可能会设置一个对撞机,以在检测到敌人时触发。现在我要存储GameObject

 getEnemy = getComponent<GameObject>();

但这不起作用。有人知道为什么吗?

*****************************实际代码(无效)************** ********* (类名EnemyDetection)

  public static GameObject enemyObj;

  void OnTriggerEnter(){


   enemyObj = other.GetComponent<GameObject>(); //Grabs enemy object to pass 
                                                 to the enemies class

    }

(类名敌人)

public void OnCollisionEnter(Collision collision)
{
    if (collision.collider.tag == "Bullet")
    {
        GameObject en = EnemyDetection.enemyObj;

        Hp -= 25;

        Debug.Log("Hit! HP left " + Hp);
        if ( Hp <= 0)
        {
           Destroy(en); // Destroys GameObject
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你很近。

评论GameObjects中提到的事物包含不同的Components,因此您进行GetComponent<SomeComponent>来获取游戏对象而非游戏对象本身上的组件

根据您的情况。 在触发器回调内部,从传递的Collider对象中获取游戏对象

//Or whatever callback you are using
void OnTriggerEnter(Collider other)
{
    //this "other" contains the gameobject as reference
    getEnemy = other.gameObject;

    //if now you need components from this then you do
    //example
    // other.gameObject.GetComponent<SomeComponent>();
}

关于多个敌人等,您可以将其存储在列表或字典中。

编辑

//INCORRECT (There is no such thing as GetComponent<GameObject>())
enemyObj = other.GetComponent<GameObject>();

//CORRECT
enemyObj = other.gameObject;

并且您的OnTriggerEnter需要具有Collider参数

void OnTriggerEnter(Collider other)
{
    enemyObj = other.gameObject;
}