Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法找到特定层中的每个刚体?_C#_Unity3d - Fatal编程技术网

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