我在相同的变换位置有一些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;
}
答案 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
本文是第二个选项
http://answers.unity3d.com/questions/532746/finding-gameobjects-within-a-radius.html