В общем, к вашему сведению: Положение и поворот, отображаемые в Инспекторе, всегда равны локальному относительно родителя
Тогда в вашем скрипте вы использовали position
и rotation
для хранения значений
trnfrm[i].pos = tranformToSave[i].transform.position;
trnfrm[i].rot = tranformToSave[i].transform.rotation;
, но позже localPosition
и localRotation
при «загрузке»
loadedTransforms[i].localPosition = savedTransforms[i].pos;
loadedTransforms[i].localRotation = savedTransforms[i].rot;
или при использовании
Instantiate(prefab, savedTransforms[i].pos, savedTransforms[i].rot, savedTransforms[i].parent);
он снова использует position
и rotation
.
Вы должны использовать position
и rotation
или localPosition
и localRotation
в обоих случаях - но последовательно.
Во-вторых, если вы используете локальные версии, вы должны отладить ваш код и убедиться, что
savedTransforms[i].parent;
не может вернуть null
. В противном случае все ваши объекты будут перемещены на корневой уровень и могут быть просто расположены по-другому.
Я почти уверен, что вы не можете использовать его таким образом, и что UnityEngine.Transform
не сериализуем. По крайней мере, я знаю, что, например, GameObject
нет. Но я не знаю, как работает ваш JsonHelper
.
Вы также знаете, что в случае
UnityEngine.Object.Instantiate(prefab, savedTransforms[i].pos, savedTransforms[i].rot, savedTransforms[i].parent);
вы ничего не пишете в loadedTransforms
поэтому он вернет массив только с null
записями.