Есть ли способ найти все RigidBody в определенном слое? - PullRequest
3 голосов
/ 08 мая 2019

Я создаю игру, в которой мне нужна гравитация, как физика. Я пытаюсь найти центр масс каждого RigidBody (за исключением того, кто запускает скрипт) в определенном слое. У меня есть это:

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

Я иду в правильном направлении? Каким должен быть «ТЕЛАЙЕР»?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Не думаю, что для этого есть встроенная функция. Я думаю, что вы можете сделать, чтобы получить все GameObjects на сцене, а затем пройти через, чтобы получить то, что вы хотите. Например:

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().

0 голосов
/ 08 мая 2019

Вы можете попробовать получить все твердые тела и внутри вашего foreach, проверить, соответствуют ли они слою, который вам нужен.

Было бы что-то вроде этого:

RigidBody2D[] allRigidBodies = (RigidBody2D[]) GameObject.FindObjectsOfType(typeof(RigidBody2D));

foreach(Rigidbody2D body in allRigidBodies)
 {
     if(body.gameObject.layer==THE_LAYER)
         // do stuff
 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...