Есть ли способ указать, где игровой объект появляется в иерархии в единстве? - PullRequest
0 голосов
/ 13 января 2020

Я установил случайное создание, которое создает новые игровые объекты, но они создаются вне моего холста и поэтому не могут быть видны во время игры. Есть ли способ это исправить? Объекты "мыслящие мысли" являются кнопками пользовательского интерфейса и создаются вне холста, хотя мне нужно, чтобы они появлялись на экране, чтобы их можно было использовать.

Я видел похожий вопрос но предложения не сработали для моей проблемы.

это очень расстраивает меня, и любая помощь будет потрясающей!

Ответы [ 3 ]

4 голосов
/ 13 января 2020

Вы можете просто передать parent в Instantiate

parent
Родитель, который будет назначен новому объекту

var newObj = Instantiate(prefab, parentTransform);

или с дополнительными преобразованиями

var newObj = Instantiate (prefab, position, rotation, parentTransform);

Или, как уже говорили другие, вы можете сделать это потом в любое время, просто назначив новый transform.parent

newObj.transform.parent = parentTransform;

или с использованием transform.SetParent

newObj.transform.SetParent(parentTransform, worldPositionStays);

Преимущество последнего состоит в том, что у вас есть дополнительный параметр worldPositionStays

worldPositionStays Если true, родительская относительная позиция, масштаб и поворот изменяются таким образом, что объект сохраняет то же положение в мировом пространстве, поворот и масштаб, что и раньше.

назначение нового

transform.parent = parentTransform;`

всегда будет действовать так же, как

transform.SetParent(parentTransform);

, так как значение по умолчанию для worldPositionStays (так что если вы не явно передать его) true.


Так что для конкретного c случая пользовательского интерфейса в Canvas вы можете использовать

public TheSpawnComponent : MonoBehaviour
{
    // Via the Inspector drag&drop any object here that is inside the canvas
    // or the canvas itself
    [SerializeField] private GameObject parentInCanvas;

    [SerializeField] private Button buttonPrefab;

    public void DoInstantiate()
    {
        var newButton = Instantiate (buttonPrefab, parentInCanvas);
        //Todo Position and callback
    }
}

Или я Если сценарий spawner прикреплен к объекту внутри холста, вы можете также порождать его как дочерний, используя

var newButton = Instantiate(buttonPrefab, transform);
1 голос
/ 13 января 2020

Вы должны использовать ниже код

public GameObject Prefab; // Object to Create
public Transform ParentOfObj;// Must Be inside the canvas or canvas it self
void Start()
{
    GameObject g = Instantiate(Prefab) as GameObject;
    g.transform.SetParent(ParentOfObj);
    g.transform.localScale = Vector3.one;
}
1 голос
/ 13 января 2020

Вы можете указать родителя преобразований после создания игрового объекта.

spawnedObject.transform.parent = canvas.transform;
...