Objeto perdendo o transform
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Objeto perdendo o transform
Ola pessoal,
Estou construindo um jogo shooter de nave e quero que o chefe, bem como outros objetos, seja instanciado apenas na posição y do player.
Fiz um projetinho bem simples e tosquinho só para ilustrar:
Configurei no script para apertar a tecla D e destruir o player, e quando apertar a tecla C ele será instanciado novamente, para dar o efeito de que a nave explodiu e em seguida foi criada de novo em jogo com uma vida a menos. A partir de 36 segundos do video aparece a estrela surgindo, some e aparece de novo, é a hora que eu aperto D e C.
Vamos lá, assim que dou play para simular aparece a estrela, que é o objeto player. Aparece um objeto estrela (Clone) no Hierarchy
Depois de um tempo surge o chefe, instanciado exatamente na posição y do player. Reparem no video que se eu movimentar o player para onde for, o chefe vai aparecer na posição y do player.
Está acontecendo que, se eu destruir o player com a tecla D e em seguida recria-lo apertando C, mesmo que tenha um novo player em jogo o chefe não é instanciado mais porque ele não reconhece mais o transform do player. Parece que o transform do player fica perdido, mesmo criando outro player.
Lá no Console aparece a mensagem MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it
Significa que o transform do player foi destruido mas o chefe ainda tenta acessar esse transform
Como que eu corrijo isso para que, mesmo destruindo e criando um novo player, o chefe reconhece o transform e seja criado?
script de spawn do chefe:
agradeço ajuda!
Estou construindo um jogo shooter de nave e quero que o chefe, bem como outros objetos, seja instanciado apenas na posição y do player.
Fiz um projetinho bem simples e tosquinho só para ilustrar:
Configurei no script para apertar a tecla D e destruir o player, e quando apertar a tecla C ele será instanciado novamente, para dar o efeito de que a nave explodiu e em seguida foi criada de novo em jogo com uma vida a menos. A partir de 36 segundos do video aparece a estrela surgindo, some e aparece de novo, é a hora que eu aperto D e C.
Vamos lá, assim que dou play para simular aparece a estrela, que é o objeto player. Aparece um objeto estrela (Clone) no Hierarchy
Depois de um tempo surge o chefe, instanciado exatamente na posição y do player. Reparem no video que se eu movimentar o player para onde for, o chefe vai aparecer na posição y do player.
Está acontecendo que, se eu destruir o player com a tecla D e em seguida recria-lo apertando C, mesmo que tenha um novo player em jogo o chefe não é instanciado mais porque ele não reconhece mais o transform do player. Parece que o transform do player fica perdido, mesmo criando outro player.
Lá no Console aparece a mensagem MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it
Significa que o transform do player foi destruido mas o chefe ainda tenta acessar esse transform
Como que eu corrijo isso para que, mesmo destruindo e criando um novo player, o chefe reconhece o transform e seja criado?
script de spawn do chefe:
- Código:
using UnityEngine;
using System.Collections;
public class ChefeSpawn : MonoBehaviour {
public GameObject prefChefe;
public float startTime = 2f; //Tempo a partir do qual ele eh chamado.
private Transform playerTransform;
private bool chefeInicializado = false;
void Update() {
var newPlay = GameObject.Find("SpawnEstrela").GetComponent<EstrelaSpawn>().novoPlayer;
if (!chefeInicializado) { //Se o boss ainda não foi inicializado
if (newPlay) { //Encontrou um personagem
playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
Invoke("spawnChefe1", startTime);
chefeInicializado = true; //Boss inicializado, por tanto não precisa criar mais outro.
}
}
}
private void spawnChefe1() {
Vector3 spawnPosition = new Vector3(transform.position.x, playerTransform.position.y, transform.position.z);
var prefChefe = Resources.Load("Prefabs/boss"); //Busca o prefab do boss.
Instantiate(prefChefe, spawnPosition, Quaternion.identity); //Cria o personagem
}
}
agradeço ajuda!
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Objeto perdendo o transform
o seu chefe precisa ter um script próprio, para setar o transform.position no Y de acordo com algum objeto que possua a tag 'player' na cena.
outra coisa, verefique se o prefab do seu player possui tag "Player"
outra coisa, verefique se o prefab do seu player possui tag "Player"
Re: Objeto perdendo o transform
Marcos o script acima que postei está em um objeto chamado SpawnChefe, que gerencia a criação do chefe.
o unico script que tem anexado no chefe é esse, que trata mais do movimento inicial dele:
o que vc sugere escrever nesse script para para setar o transform.position y do player?
e sim, a estrela já possui a tag Player nela
o unico script que tem anexado no chefe é esse, que trata mais do movimento inicial dele:
- Código:
using UnityEngine;
using System.Collections;
public class ChefeControl : MonoBehaviour {
private float tempo;
public float minSpeed;
public float speed;
public Transform player;
void Start () {
}
void Update () {
tempo += Time.deltaTime;
if (speed <= 0f) {
return;
}
if (tempo <= 4f) {
transform.Translate(Vector2.left * speed * Time.deltaTime);
}
if (tempo >= 2.0f) {
speed -= Time.deltaTime * 2;
}
}
}
o que vc sugere escrever nesse script para para setar o transform.position y do player?
e sim, a estrela já possui a tag Player nela
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Objeto perdendo o transform
Acabei descobrindo que ao passar a linha playerTransform = GameObject.FindGameObjectWithTag("Player").transform; para dentro do metodo spawnChefe1, o problema resolveu.
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Tópicos semelhantes
» Alterar o Rect Transform de um objeto canvas
» [RESOLVIDO] Spawn do player está perdendo referencias
» [RESOLVIDO] Como faço para um transform.position receber um novo transform dentro de um if
» Quero setar uma variavel de um objeto para outros objetos , mas o objeto esta dentro de uma array desse objeto
» [RESOLVIDO] Button perdendo a instancia
» [RESOLVIDO] Spawn do player está perdendo referencias
» [RESOLVIDO] Como faço para um transform.position receber um novo transform dentro de um if
» Quero setar uma variavel de um objeto para outros objetos , mas o objeto esta dentro de uma array desse objeto
» [RESOLVIDO] Button perdendo a instancia
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos