如何在未附加到游戏对象的脚本中处理二维碰撞
How to handle 2d collisions in a script that isn't attached to Game Object
一般来说,据我所知,碰撞是在附加到游戏对象的脚本中处理的。在我的游戏中,我有 6 个游戏对象相互碰撞,使得前一个想法难以实现。我想制作所有游戏对象预制件并在附加到空游戏对象的另一个脚本中实例化它们。我如何处理新脚本中所有这 6 个游戏对象之间的碰撞?
我和 Joe Blow 想知道同样的事情,但如果你想尝试做的是手动处理碰撞(顺便说一下,这会使物理更难,因为你必须计算弹性、重力等...手动)然后你可以试试这个:
public class OtherScript : MonoBehavior
{
public GameObject[] objects; //Your 6 GameObject
void Update()
{
for (int i=0; i<objects.Length; i++)
{
for (int j=0; j<objects.Length; i++)
{
if (objects[i].GetComponent<Renderer>().bounds.Intersects(
objects[j].GetComponent<Renderer>().bounds))
{
//Handle collision
break;
}
}
}
}
}
如果这不起作用,那么您也应该尝试 GetComponent<MeshFilter>().mesh.bounds
。请注意,如果您的游戏是 2D 游戏,则应改用 GetComponent<SpriteRenderer>().mesh.bounds
。
一般来说,据我所知,碰撞是在附加到游戏对象的脚本中处理的。在我的游戏中,我有 6 个游戏对象相互碰撞,使得前一个想法难以实现。我想制作所有游戏对象预制件并在附加到空游戏对象的另一个脚本中实例化它们。我如何处理新脚本中所有这 6 个游戏对象之间的碰撞?
我和 Joe Blow 想知道同样的事情,但如果你想尝试做的是手动处理碰撞(顺便说一下,这会使物理更难,因为你必须计算弹性、重力等...手动)然后你可以试试这个:
public class OtherScript : MonoBehavior
{
public GameObject[] objects; //Your 6 GameObject
void Update()
{
for (int i=0; i<objects.Length; i++)
{
for (int j=0; j<objects.Length; i++)
{
if (objects[i].GetComponent<Renderer>().bounds.Intersects(
objects[j].GetComponent<Renderer>().bounds))
{
//Handle collision
break;
}
}
}
}
}
如果这不起作用,那么您也应该尝试 GetComponent<MeshFilter>().mesh.bounds
。请注意,如果您的游戏是 2D 游戏,则应改用 GetComponent<SpriteRenderer>().mesh.bounds
。