Soy nuevo y tengo dificultades para reaparecer mi IA (en este momento solo es un cubo que sigue a mi jugador) después de que lo destruyan. Creo que es porque la secuencia de comandos se encuentra en el objeto que se destruye. pero que tengo que hacer para reaparecer?
(aunque estoy seguro de que mi código de reaparición no es bueno: \ (Es un proyecto de Android móvil))
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyTesting : MonoBehaviour { [SerializeField] public GameObject player; public GameObject enemy; private Rigidbody body; Vector3 accelerationDir; // Use this for initialization void Start() { body = GetComponent<Rigidbody>(); } private void Update() { accelerationDir = Input.acceleration; if (accelerationDir.sqrMagnitude>=5) { EnemyDead(); } } void EnemyDead() { Destroy(enemy); Invoke("Respawn", 5); } void Respawn() { enemy = (GameObject)Instantiate(enemy); enemy.transform.position = transform.position; } // Update is called once per frame void FixedUpdate() { Vector3 toTarget = player.transform.position - transform.position; float speed = 1.5f; transform.Translate(toTarget * speed * Time.deltaTime); } }¡Muchas gracias!
Supongo que su GameObject enemy está dentro de la escena que contiene su instancia EnemyTesting MonoBehaviour (corríjame si me equivoco).
Si este es el caso, no puede crear una instancia de un gameObject que se destruye.
Como señaló @derHugo, no debe usar Destroy and Instatiate para su caso de uso . Sería mejor dejar inactivo el GameObject enemy , moverlo a la posición que desees y (re)establecerlo activo. Parecerá que el enemigo reapareció.
Si desea profundizar en el tema más adelante, mire el patrón de optimización del juego de agrupación de objetos .
De lo contrario, si aún desea usar Instanciar para reaparecer, crearía un prefabricado de su GameObject enemy . El GameObject enemy al que se hace referencia en el campo EnemyTesting (en la vista Inspector), sería su prefabricado de la jerarquía del proyecto en lugar de un GameObject dentro de la escena.
De esta forma, podrías instanciar un GameObject enemy tantas veces como quieras (¡y usarlo en otras escenas!). No olvides mantener una referencia al GameObject enemy instanciado para que puedas saber cuál quieres destruir. Se vería así:
enemy = Instantiate(enemyPrefab, transform.position, transform.rotation); Puede reemplazar la transform con la transformación de su elección, por ejemplo, la transformación de un enemyRespawnPoint de RespawnPoint enemigo vacío en su Escena.
¿Ves algún error en la consola?