Unity 2D(C#) - 相同位置的更多对象

时间:2016-06-27 18:08:46

标签: c# object unityscript unity5

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

编辑:

这是我的代码: 我希望在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;
}

3 个答案:

答案 0 :(得分:0)

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

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

使用的相同位置对象

CodeSample

   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
                                    });



        }

     }

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

答案 1 :(得分:0)

假设所有对象上都有Collider2D,您只需拨打Physics2D.BoxCastAll(即可返回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.
}

答案 2 :(得分:0)

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

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

  1. 上述文章的基础知识
    • 确保所有物品都有对撞机
    • 确保至少有一件事有触发器
    • 用户&#34; TriggerList&#34;在触发器内获得带有对撞机的所有物品。
  2. 本文是第二个选项

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

    1. 基础知识
      • 获得职位/转型
      • 获取球体内的所有对撞机
      • 遍历列表。