Unity 2D (C#) - 同一位置有更多对象

Unity 2D (C#) - More objects in same position

我有一些二维对象在相同的变换位置。如何找出同一位置有多少对象以及它们是哪些对象?

编辑:

这是我的代码: 我想保存 transform.position - new Vector3(speed, 0, 0)

上的所有对象
GameObject go = GetObjectAt(transform.position - new Vector3(speed, 0, 0));

    public GameObject GetObjectAt(Vector3 position)
{
    string pos = position.x + "_" + position.y + "_";
    if (obstacleDictionary.ContainsKey(pos + "BigRed"))
    {
        return obstacleDictionary[pos + "BigRed"];
    }

    else if (obstacleDictionary.ContainsKey(pos + "SmallRed"))
    {
        return obstacleDictionary[pos + "SmallRed"];
    }

    else return null;
}

我认为你可以使用 List<SomeModel> 来保持对象和位置。

创建对象时将对象添加到列表 然后找到 LINQ

使用的相同位置对象

代码示例

   Public class ObjectListener
    {
       public string ObjectName {get; set;}
       public Vector2 ObjectVector {get; set;}
    }



       public class CreateObject : MonoBehaviour 
        {
        List<ObjectListener> _gameObjectListener = new List<ObjectListener>();

        void Update()
        {
         private GameObject _gameObject  ; // you must create _gameObject 
                                           // and set tranform.Postion  maybe you 
                                           //   can use a method returned gameObject 

        Instantiate(_gameObject, _gameObject.transform.position, Quaternion.identity);

        _gameObjectListener.Add(new ObjectListener
                                    {
                                      ObjectName =  _gameObject.Name,
                                      ObjectVector  =  _gameObject.transform.postion
                                    });



        }

     }

我不确定这是否正确,但您可以将所有创建的对象名称和位置保留在列表对象中。所以你可以找到有多少对象在同一个对象中

假设所有对象都有一个 Collider2D on them, you just need to call Physics2D.BoxCastAll( 并且它将 return 一个 RaycastHit2D 的数组,您可以调用 hitItems[i].collider.gameObject 来获取对象。

RaycastHit2D[] hitItems = Physics2D.BoxCastAll(origin, size, angle, direction);
for(int i = 0; i < hitItems.Length; i++)
{
    GameObject hitObject = hitItems[i].collider.gameObject;
    //Do something with the hit object.
}

下面文章中提到了一种方法

http://answers.unity3d.com/questions/638319/getting-a-list-of-colliders-inside-a-trigger.html

  1. 以上文章的基础知识
    • 确保一切都有碰撞器
    • 确保至少有一件事情有触发器
    • 用户 "TriggerList" 获取触发器内带有碰撞器的所有项目。

这篇文章是第二个选项

http://answers.unity3d.com/questions/532746/finding-gameobjects-within-a-radius.html

  1. 基础知识
    • 得到一个position/transform
    • 获取一个球体内的所有对撞机
    • 遍历列表。