如何在 OnCollisionEnter2D() 中找到碰撞游戏对象的索引

How to find index of colliding Game Object in OnCollisionEnter2D()

我已经创建了一个预制件并在它附加到另一个游戏对象的脚本中多次实例化它,如下所示。

void Start () {

    badGuys= new List<GameObject> ();

    int numberOfBadGuys = 6;
    Camera camera = GameObject.FindGameObjectWithTag ("MainCamera").GetComponent<Camera> ();

    for (int i = 1; i < numberOfBadGuys + 1; i++) {
        GameObject badGuyObject =  (GameObject)Instantiate(badGuy, new Vector3(Screen.width*i/2, Screen.height*i/6, camera.nearClipPlane ), Quaternion.identity );
        badGuys.Add(badGuyObject);
    }

}

由于数组中的所有实例化对象都具有相同的标签和游戏对象,如何找到数组中碰撞对象的索引?

void OnCollisionEnter2D(Collision2D col)    {
    Debug.Log("collision has began");

    if (col.gameObject.tag == "badGuy") {
             // how can I tell the index of colliding game object in badGuys array
      }
}

你有没有考虑让你的坏人知道他们的索引?

您应该能够像这样循环和比较游戏对象:

void OnCollisionEnter2D(Collision2D col)
{
    Debug.Log("collision has began");

    int collidedBadGuyIndex = -1; //This variable should be outside this function.

    if (col.gameObject.tag == "badGuy")
    {
        for (int i=0; i<badGuys.Length; i++)
        {
            if (col.gameObject.Equals(badGuys[i]))
            {
                collidedBadGuyIndex = i;
                break;
            }
        }
    }
}

如果这不起作用,那么您可以向 badguys 添加一个脚本(即 BadGuyScript.cs)并在脚本内部添加一个名为 bool hasCollided = false; 的变量,然后当 badguy 发生碰撞时设置该变量到 true 然后循环所有坏人并找到值等于 true.

的坏人的索引

尝试为所有坏人使用一个 parent