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

Posted

技术标签:

【中文标题】如何在 OnCollisionEnter2D() 中找到碰撞游戏对象的索引【英文标题】:How to find index of colliding Game Object in OnCollisionEnter2D() 【发布时间】:2016-08-10 00:03:52 【问题描述】:

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

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
      

【问题讨论】:

您是否在包含 badguys 数组的同一脚本中检测到冲突? 是的,它们都在同一个脚本中 【参考方案1】:

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

【讨论】:

确实如此。而且,无效的,别忘了你也可以检测到在坏人身上的碰撞。你应该这样做并在那里进行任何处理。【参考方案2】:

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

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 然后循环所有的 badguy 并找到值等于 true 的 badguy 的索引。

【讨论】:

嗨奥古斯丁。确实,从表面上看,正如问题所描述的那样,找到索引的唯一方法就是按照您的说法循环。但正如下面“是”所提到的,每个项目都应该知道自己的索引。 @Joe Blow 是的,我知道他的解决方案更好,只是我们几乎同时发布,所以他可能在我写答案时发帖。【参考方案3】:

尝试为所有坏人使用一个父母

【讨论】:

以上是关于如何在 OnCollisionEnter2D() 中找到碰撞游戏对象的索引的主要内容,如果未能解决你的问题,请参考以下文章

OncollisionEnter2D 不工作,但 OnTriggerEnter2D 工作正常

Unity 在没有 IsTrigger 的情况下使用 OnCollisionEnter2D 检测碰撞

OnCollisionEnter2D 发送信息失败

unity3d OncollisionEnter2d检测不到碰撞,而且勾了isTrigger也无法穿过

在unity3d(2d)中碰撞后忽略物理

Unity:尝试调用事件时出错