实例化GameObject会导致所述对象的Transform被破坏?

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)

Muk*_*ini 2

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 点中的语句。