如何 return 一组中的所有对象到其原始位置
How to return all objects in a group to their original position
出现问题,我无法以任何方式return将对象恢复到其原始状态。
我试图通过缓存变成一个变量:
private Transform Trans;
private void Start() {
Trans = transform;
}
但后来我意识到这只是对对象的引用并且值相同并且没有任何结果。
想到克隆一个对象:
private void Start() {
Trans = transform;
if (!Clone) {
Clone = Instantiate(Trans.gameObject);
Clone.GetComponent<Rigidbody>().isKinematic = true;
Clone.SetActive(false);
}
if (Clone) {
for (int i = 0; i < Clone.childCount; ++i) {
Transform Child = Clone.GetChild(i);
string Name = Child.name;
SaveTransforms.Add(Name, Child);
}
}
}
其中 SaveTransforms
是:
public static readonly Dictionary<string, Transform> SaveTransforms = new Dictionary<string, Transform>();
尝试分配转换后,当我需要return所有GameObjects
到起始位置时:
foreach (KeyValuePair<string, Transform> entry in SaveTransforms) {
string Name = entry.Key;
Transform OldTransform = entry.Value;
for (int i = 0; i < Clone.childCount; ++i) {
Transform Child = Trans.GetChild(i);
if (Child.name.Equals(Name)) {
Child.transform.position = OldTransform.position;
Child.transform.rotation = OldTransform.rotation;
}
}
}
但是即使在这里也没有任何结果,尽管添加了克隆对象并且当我在另一个对象中更改它时它的位置没有改变,当我这样做时:
print(Child.transform.position);
print(Transform.position);
产生相同的值。
好像克隆也是一个link.
大佬们有遇到类似问题吗?
有没有一种方法可以将它原样复制或 return 将位置复制到它们的初始值。
问题已解决:
foreach (KeyValuePair<string, Transform> entry in SaveTransforms) {
string Name = entry.Key;
Transform OldTransform = entry.Value;
for (int i = 0; i < Clone.childCount; ++i) {
Transform Child = Trans.GetChild(i);
if (Child.name.Equals(Name)) {
Child.localPosition = OldTransform.localPosition;
Child.localRotation = OldTransform.localRotation;
}
}
}
出现问题,我无法以任何方式return将对象恢复到其原始状态。
我试图通过缓存变成一个变量:
private Transform Trans;
private void Start() {
Trans = transform;
}
但后来我意识到这只是对对象的引用并且值相同并且没有任何结果。
想到克隆一个对象:
private void Start() {
Trans = transform;
if (!Clone) {
Clone = Instantiate(Trans.gameObject);
Clone.GetComponent<Rigidbody>().isKinematic = true;
Clone.SetActive(false);
}
if (Clone) {
for (int i = 0; i < Clone.childCount; ++i) {
Transform Child = Clone.GetChild(i);
string Name = Child.name;
SaveTransforms.Add(Name, Child);
}
}
}
其中 SaveTransforms
是:
public static readonly Dictionary<string, Transform> SaveTransforms = new Dictionary<string, Transform>();
尝试分配转换后,当我需要return所有GameObjects
到起始位置时:
foreach (KeyValuePair<string, Transform> entry in SaveTransforms) {
string Name = entry.Key;
Transform OldTransform = entry.Value;
for (int i = 0; i < Clone.childCount; ++i) {
Transform Child = Trans.GetChild(i);
if (Child.name.Equals(Name)) {
Child.transform.position = OldTransform.position;
Child.transform.rotation = OldTransform.rotation;
}
}
}
但是即使在这里也没有任何结果,尽管添加了克隆对象并且当我在另一个对象中更改它时它的位置没有改变,当我这样做时:
print(Child.transform.position);
print(Transform.position);
产生相同的值。
好像克隆也是一个link.
大佬们有遇到类似问题吗?
有没有一种方法可以将它原样复制或 return 将位置复制到它们的初始值。
问题已解决:
foreach (KeyValuePair<string, Transform> entry in SaveTransforms) {
string Name = entry.Key;
Transform OldTransform = entry.Value;
for (int i = 0; i < Clone.childCount; ++i) {
Transform Child = Trans.GetChild(i);
if (Child.name.Equals(Name)) {
Child.localPosition = OldTransform.localPosition;
Child.localRotation = OldTransform.localRotation;
}
}
}