【问题标题】:Is there a way I can find every RigidBody in a specific layer?有没有办法可以找到特定层中的每个刚体?
【发布时间】:2019-05-08 19:29:50
【问题描述】:

我正在制作一个需要重力(如物理)的游戏。我试图在特定层中找到每个刚体(运行脚本的除外)的质心。 我有这个:

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

我的方向正确吗? “THELAYER”应该是什么?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我认为没有内置函数。 我认为你可以做的是获取场景中的所有游戏对象,然后循环获取你想要的。例如:

    GameObjects[] gameObjects=GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[];
    

    您可以使用脚本忽略 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
    }
    }
    

    但请注意,您不想在Update() 函数中运行此代码。

    【讨论】:

    • 我需要额外的命名空间吗?
    • 我不这么认为。为什么要问?
    • 几乎所有内容都带有下划线,并显示“缺少使用或构建参考吗?”
    • 但我还是很欣赏它
    • 好的。从 2019 年的文档中,`layer` 返回一个 int。这可能是问题所在。试试go.layer==5; 或任何层号。
    【解决方案2】:

    您可以尝试将所有刚体放入 foreach 中,测试它们是否与您需要的层匹配。

    应该是这样的:

    RigidBody2D[] allRigidBodies = (RigidBody2D[]) GameObject.FindObjectsOfType(typeof(RigidBody2D));
    
    foreach(Rigidbody2D body in allRigidBodies)
     {
         if(body.gameObject.layer==THE_LAYER)
             // do stuff
     } 
    

    【讨论】:

    • “body.layer”对我不起作用。它说“找到的图层没有其他方法”。
    • 我编辑了我的答案。您必须访问与身体相关的游戏对象body.gameObject.layer
    猜你喜欢
    • 2021-05-30
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多