Ash*_*pes 5 c# instantiation unity-game-engine gameobject
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;
}
}
Run Code Online (Sandbox Code Playgroud)
1)使用以下语句会导致不期望的结果或抛出错误 -
NewPillar = Instantiate (Single, Single.transform);
Run Code Online (Sandbox Code Playgroud)
或者
NewPillar = Instantiate (Single);
NewPillar.transform.parent = Single.transform;
Run Code Online (Sandbox Code Playgroud)
2)您可以使用以下代码绕过此问题 -
NewPillar = Instantiate (Single, Single.transform.position, Single.transform.rotation);
Run Code Online (Sandbox Code Playgroud)
说明: Single是预制件,而不是场景中的实际对象。变换也是一个决定场景中对象的位置、旋转和缩放的组件。根据 Unity3D,由于Single是预制件,因此禁用直接使用其变换组件以防止数据损坏。这就是为什么我们在使用上面第 1 点中的语句时会出错。
但我们可以使用预制件变换组件中存储的位置、旋转和缩放数据。这让我们可以使用上面第 2 点中的语句。