C# 有没有办法找到特定层中的每个刚体?
我正在做一个像物理一样需要重力的游戏。我试图在一个特定的层中找到每个刚体(除了运行脚本的刚体)的重心。 我有这个:C# 有没有办法找到特定层中的每个刚体?,c#,unity3d,C#,Unity3d,我正在做一个像物理一样需要重力的游戏。我试图在一个特定的层中找到每个刚体(除了运行脚本的刚体)的重心。 我有这个: float AvrgMass; float count = 0f; Vector3 AvrgPoisition = Vector3.zero; void Update(){ foreach (Rigidbody2D Body in "THELAYER") { AvrgPoisition += Body.transform.position;
float AvrgMass;
float count = 0f;
Vector3 AvrgPoisition = Vector3.zero;
void Update(){
foreach (Rigidbody2D Body in "THELAYER")
{
AvrgPoisition += Body.transform.position;
AvrgMass += Body.mass;
count++;
}
AvrgPoissition -= ThisBody.transform.position;
AvrgMass -= ThisBody.mass;
AvrgPoisition /= count;
AvrgMass /= count;
}
我走的方向对吗?“图层”应该是什么?您可以尝试获取所有刚体,并在foreach中测试它们是否与您需要的图层匹配 应该是这样的:
rigidODY2d[]allRigidBodies=(RigidBody2D[])GameObject.FindobjectSoftType(typeof(RigidBody2D));
foreach(所有刚体中的刚体2D体)
{
if(body.gameObject.layer==_层)
//做事
}
我认为这没有内置的功能。
我认为你能做的就是获取场景中的所有游戏对象,然后循环得到你想要的。例如:
GameObjects[] gameObjects=GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[];
你可以用脚本忽略游戏对象
foreach(GameObject go in gameObjects){
if(go.name!="GameManager" && go.layer=="layerName"){
RigidBody2D rb2d=go.GetComponent<RigidBody2D>();
//Do some stuff
AvrgPoisition += rb2d.transform.position;
AvrgMass += rb2d.mass;
count++;
//Etc
}
}
foreach(游戏对象进入游戏对象){
if(go.name!=“GameManager”&&go.layer==“layerName”){
RigidBody2D rb2d=go.GetComponent();
//做点什么
AvrgPoisition+=rb2d.transform.position;
AvrgMass+=rb2d.mass;
计数++;
//等
}
}
但是要小心,您不希望在
Update()
函数中运行此代码 我需要额外的名称空间吗?我不这么认为。你为什么要问?几乎所有的东西都有下划线,上面写着“使用或构建引用丢失了吗?”但我还是要解释一下。从2019文档中,`layer`返回一个int
。这可能就是问题所在。尝试go.layer==5代码>或不管层号是什么,“body.layer”对我不起作用。上面写着“找到的图层没有其他方法”。我编辑了我的答案。您必须访问与主体相关的游戏对象body.gameObject.layer
。