Установите родительское преобразование так, чтобы дочернее преобразование было (0,0,0) без вращения - PullRequest
1 голос
/ 25 октября 2019

У меня есть игровой объект со следующей иерархией (каждый интервал означает, что он дочерний):

ASO
  CPO
    ARC
    Tr
      BabyPrefab

Я пытался следовать, но это не сработало, вот почему.

var _go = GameObject.Find("BabyPrefab");
var _arOrig = GameObject.Find("ASO");
_go.transform.SetParent(null, true);
_arOrig.transform.SetParent(_go.transform, true);

_go.transform.position = Vector3.zero;

_go.transform.rotation = Quaternion.identity;

_arOrig.transform.SetParent(null, true);

_go.transform.SetParent(_arOrig.trackablesParent);

Я хочу, чтобы трансформация игрового объекта BabyPrefab стала position = (0,0,0) и Quartenion.identity.

И все другие игровые объекты в этой иерархии преобразуются для сохранения их относительных координат в BabyPrefab.

1 Ответ

1 голос
/ 25 октября 2019

Используйте transform.Translate на ASO с отрицательным положением BabyPrefab в мировом пространстве для перемещения ASO, так что позиция BabyPrefab переходит в Vector3.zero:

var _go = GameObject.Find("BabyPrefab");
var _arOrig = GameObject.Find("ASO");
_arOrig.transform.Translate(-_go.transform.position, Space.World);

Затем получите вращение мира BabyPrefab в форме угла / оси:

float babyAngle;
Vector3 babyAxis;
_go.transform.rotation.ToAngleAxis(out babyAngle, out babyAxis);

Затем поверните ASO вокруг этой оси, проходящей через Vector3.zero, на отрицательное значение этого угла:

_arOrig.transform.RotateAround(Vector3.zero, babyAxis, -babyAngle);

Всего:

var _go = GameObject.Find("BabyPrefab");
var _arOrig = GameObject.Find("ASO");
_arOrig.transform.Translate(-_go.transform.position, Space.World);

float babyAngle;
Vector3 babyAxis;
_go.transform.rotation.ToAngleAxis(out babyAngle, out babyAxis);

_arOrig.transform.RotateAround(Vector3.zero, babyAxis, -babyAngle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...