Я хочу создать экземпляр объекта на месте другого объекта, который уничтожен - PullRequest
0 голосов
/ 22 октября 2019

Я уничтожаю два объекта, и когда они уничтожаются, я хочу создать экземпляр объекта в одном месте.

public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    public GameObject prefab;

    public void Awake()
    {
        instance = this;
    }

    public void Update()
    {
        Check();
    }

    public void Check()
    {
        if (MagnetBehaviour.instance.isConnected == true)
        {
            Debug.Log("Check");
            MagnetBehaviour.instance.isConnected = false;
            Instantiate(prefab);

            Debug.Log(MagnetBehaviour.instance.isConnected);
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 22 октября 2019

Вы должны уточнить в своем вопросе, что вы используете Unity3D и что объекты, на которые вы ссылаетесь, являются объектами GameBject в Unity3D.

В своем коде, где вы называете Destroy (myGameobject), вы также можете создать новый игровой объект, который вам нужен.

Как то так.

public Gameobject myNewGameObjectPrefab; //drag your prefab here in the inspector

void DestroyAndCreate(Gameobject myGameObject)
{
    GameObject newObj = Instantiate(myNewGameObjectPrefab, myGameobject.transform.position);
    Destroy(myGameobject);
}
1 голос
/ 22 октября 2019

Вам нужно будет кэшировать позицию объекта до того, как он будет уничтожен, и создать экземпляр объекта, который вы хотите создать с помощью кэшированной позиции. Этот следующий скрипт будет работать только для позиции. (Не проверено)

public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    public GameObject prefabToDestroy;
    public GameObject prefabToSpawn;

    public void Start()
    {
       DestroyAndSpawn(prefabToDestroy, prefabToSpawn);
    }

    public void DestroyAndSpawn(GameObject prefabToDestroy, GameObject prefabToSpawn)
    {
       Vector3 position = prefabToDestroy.transform.position;
       Destroy(prefabToDestroy);
       Instantiate<GameObject>(prefabToSpawn, position, Quaternion.Identity);
    }
}

Если вы хотите, чтобы порожденный объект имел такое же вращение, что и разрушенный, вы также можете кэшировать вращение и заменить Quaternion.Identity этим вращением.

0 голосов
/ 22 октября 2019

Вы можете прикрепить такой скрипт к объекту, который вы намереваетесь уничтожить

using UnityEngine;

public class DestroyableObject : MonoBehaviour
{
    public bool Destroyed { get;  set; }

    public Vector3 Position { get; set; }

    private void OnDestroy()
    {
        Position = transform.position;
        Destroyed = true;
    }
}

Затем в вашем коде

public DestroyableObject obj1;
public DestroyableObject obj2;

public void Check()
{
    if (obj1.Destroyed && obj2.Destroyed)
    {
        Instantiate(prefab, obj1.Position, Quaternion.identity);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...