unity和c#
这实际上只是一个我很好奇的小问题...我在(失败的(尝试使其正常工作的同时遇到了它。我一直在尝试将此代码工作几个小时。
无论如何,执行此代码时,只有一个错误,但出现3次。它说"不能破坏'Pillar1'的变换组件。如果您想销毁游戏对象,请在游戏对象上调用'destroy''。
我第一次得到了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlatformGenerator : MonoBehaviour {
public GameObject Single;
private GameObject NewPillar;
private int PillarCount;
private bool run;
private int px;
private int py;
private int pz;
void Start () {
px = 0;
py = 0;
pz = 0;
bool run = true;
PlatformCreate ();
}
void Update () {
if (run) {
PlatformCreate ();
if (PillarCount == 3) {
run = false;
}
}
}
void PlatformCreate () {
PillarCount +=1;
Single.transform.position = new Vector3 (px, py, pz);
NewPillar = Instantiate (Single, Single.transform);
NewPillar.name = "Pillar" +PillarCount;
px += 2;
}
}
1(使用以下语句会导致不希望的结果或投掷错误 -
NewPillar = Instantiate (Single, Single.transform);
或
NewPillar = Instantiate (Single);
NewPillar.transform.parent = Single.transform;
2(您可以使用以下代码 -
绕过它NewPillar = Instantiate (Single, Single.transform.position, Single.transform.rotation);
说明: Single
是预制,而不是场景中的实际对象。同样,变换是确定场景中对象的位置,旋转和比例的组件。根据Unity3D,由于Single
是预制,因此使用其转换组件直接被禁用以防止数据损坏。这就是为什么我们在上述第1点中使用语句时会出现错误的原因。
,但我们可以使用存储在预制键转换组件中的位置,旋转和比例数据。这使我们可以在上面的第2点中使用该语句。
您无法在类型'转换'的引用中调用销毁。错误是您需要将GameObject传递到销毁方法而不是转换的错误。
我猜测代码"销毁"一个转换的一部分,但是无论如何,我的猜测是这样的:
Destroy(transform); // -1
或
Destroy(pillar1.transform); //Where pillar1 is a Gameobject -2
或
Destroy(pillar1); // Where pillar1 is a Transform -3
替换
-1
Destroy(gameObject);
-2
Destroy(pillar1); //Where pillar1 is a Gameobject -2
-3
Destroy(pillar1.gameObject);
错误表明已经有一个对象柱子1,因此我们假设它是随后拨打PlatformCreate
的调用之一。
呼叫Instantiate
包括所有孩子。因此,您将Single
克隆到Pillar1
,然后将新游戏对象重新定位为Single
。在下一个通话中,两个都被克隆了。因此Pillar2
将是Single
和Pillar1
尽管我不明白为什么不起作用,但我怀疑内部错误。您确定这是您想要的(也许您只想指定位置而忘记旋转(s。实例化(?如果是您想要的,然后尝试将实例化过程分为2个步骤:
- 无父母规格的致电实例化
-
pillar2.SetParent(Single)