Установить детей в Prefab как отдельные объекты GameObject - PullRequest
0 голосов
/ 09 мая 2018

При создании префаба я пытаюсь, чтобы каждый отдельный GameObject, составляющий префаб, запускал свои собственные соответствующие скрипты. В принципе, Я хочу, чтобы префаб сломался после нереста; оставляя отдельные игровые объекты.

У меня GameObjects в Префабе как дети Пустого. Любые предложения.

enter image description here

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreateFab : MonoBehaviour
{
    public Transform Spawnpoint;
    public Rigidbody Prefab;

    public void OnClick()
    {
        Rigidbody RigidPrefab;
        RigidPrefab = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation) as Rigidbody;
    }

    public void DetachFromParent()
    {
        // Detaches the transform from its parent.
        transform.parent = null;
    }
}

Cube Script

using UnityEngine;
using UnityEditor;
using System.IO;

public class WallClick : MonoBehaviour
{
    string path;
    public MeshRenderer mRenderer;


    public void OpenExplorer()
    {
        path = EditorUtility.OpenFilePanel("Overwrite with png", "", "png");
        GetImage();
    }

    void GetImage()
    {
        if (path != null)
        {
            UpdateImage();
        }
    }

    void UpdateImage()
    {
        byte[] imgByte = File.ReadAllBytes(path);
        Texture2D texture = new Texture2D(2, 2);
        texture.LoadImage(imgByte);

        mRenderer.material.mainTexture = texture;
    }
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Используемое здесь transform.parent относится к преобразованию игрового объекта, к которому присоединен скрипт CreateFab.cs, а не к дочерним элементам префаба (кубики меньшего размера).

Правильный путь будет:

// Instantiate the prefab
RigidBody rigidPrefab = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation) as Rigidbody;

// Detach all children from the parent. Each child refers to the transform of a single cube.
foreach (Transform child in rigidPrefab.transform)
{
    child.parent = null;
}
0 голосов
/ 09 мая 2018

Если вы создали префаб, укажите ссылку на порожденный предмет.

var obj = Instantiate(prefabGameobject);

Затем вы можете делать все что угодно с порожденным объектом

var script = obj.AddComponent<YourScript>();

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

...