[RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
Boa noite pessoal
Minha 2 dúvidas são a seguintes: Esse meu script está funcionando, mas gostaria de saber sem tem outro jeito de deixar o código mais limpo, sem tanto if cópia e cola para caso o personagem encoste em objetos com TAG Enemy ou Trap (E caso mais pra frente eu queira colocar outra), pois nesse caso estou repetindo a função e o resultado apenas mudando as TAGs, deixando o código sujo.
A outra dúvida é a seguinte: Como faço para adicionar um tempo antes do personagem respawnar no checkpoint ou chame uma animação ou tela de GameOver? Pois assim que ele enconsta nessas TAGs, ele respawna imediatamente no Checkpoint.
Muito obrigado.
Minha 2 dúvidas são a seguintes: Esse meu script está funcionando, mas gostaria de saber sem tem outro jeito de deixar o código mais limpo, sem tanto if cópia e cola para caso o personagem encoste em objetos com TAG Enemy ou Trap (E caso mais pra frente eu queira colocar outra), pois nesse caso estou repetindo a função e o resultado apenas mudando as TAGs, deixando o código sujo.
A outra dúvida é a seguinte: Como faço para adicionar um tempo antes do personagem respawnar no checkpoint ou chame uma animação ou tela de GameOver? Pois assim que ele enconsta nessas TAGs, ele respawna imediatamente no Checkpoint.
Muito obrigado.
- Código:
using UnityEngine;
/// </summary>
public class DeathAndRespawn : MonoBehaviour
{
private Rigidbody thisRigidbody;
void Start()
{
thisRigidbody = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Enemy")
{
thisRigidbody.transform.position = CheckPoint.GetActiveCheckPointPosition();
}
if (collision.gameObject.tag == "Trap")
{
thisRigidbody.transform.position = CheckPoint.GetActiveCheckPointPosition();
}
}
}
flaviopunk182- Iniciante
- PONTOS : 1622
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
Tem vários jeitos de diminuir esses ifs, um deles é com o operador or:
Outro jeito menos chato de escrever é criar uma array de string com todas as tags possíveis:
E dentro do CollisionEnter fazer:
- Código:
if(collision.gameObject.tag == "Trap" ||
collision.gameObject.tag == "Enemy")
// Comandos
Outro jeito menos chato de escrever é criar uma array de string com todas as tags possíveis:
- Código:
string[]tags = {"Enemy", "Trap"};
E dentro do CollisionEnter fazer:
- Código:
foreach(var theTag in tags){
if(collider.gameObject.tag == theTag){
// Comandos
break;
}
}
Re: [RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
Flávio, só uma observação, é recomendável utilizar o método compareTag() para checar se uma tag é igual a outra, da forma atual você está fazendo uma comparação de strings que é mais lenta e gera mais lixo pro GC.
https://docs.unity3d.com/ScriptReference/Component.CompareTag.html
https://docs.unity3d.com/ScriptReference/Component.CompareTag.html
Fagner- Moderador
- PONTOS : 4444
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
Muito obrigado a todos, consegui as modificações necessárias..
flaviopunk182- Iniciante
- PONTOS : 1622
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
Agora o código está assim e tudo o que eu queria fazer esta funcionando, ignorem algumas partes com // e escritos (Flavio), foram partes que estou testando para futuras modificações.
Caso alguém precise de algo parecido, ai está.
- Código:
using UnityEngine;
using System.Collections;
/// </summary>
public class DeathAndRespawn : MonoBehaviour
{
private Rigidbody thisRigidbody;
void Start()
{
thisRigidbody = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Enemy") || collision.gameObject.CompareTag("Trap"))
{
//(Flavio)
StartCoroutine(PlayerDeath());
}
}
//(Flavio)
IEnumerator PlayerDeath(){
GetComponent<MeshRenderer>().enabled = false;
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ | RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezePositionZ;
//thisRigidbody.transform.localScale = new Vector3 (5, 5, 5);
http://thisRigidbody.transform.position = new Vector3 (0, 0, 0);
yield return new WaitForSeconds(3);
thisRigidbody.transform.position = CheckPoint.GetActiveCheckPointPosition();
//(Flavio)
GetComponent<MeshRenderer>().enabled = true;
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.None;
http://thisRigidbody.transform.localScale = new Vector3 (5, 5, 5);
//(Flavio)
//Instantiate(deathParticle, transform.position, Quaternion.identity);
}
}
Caso alguém precise de algo parecido, ai está.
flaviopunk182- Iniciante
- PONTOS : 1622
REPUTAÇÃO : 0
Respeito as regras :
Re: [RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
Como não achei o botão de editar, essas partes http: não existem no meu código, a hora de passar pra cá que apareceu.
flaviopunk182- Iniciante
- PONTOS : 1622
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» (Unity2D) Como fazer o personagem cair mais rápido depois do pulo
» [RESOLVIDO] Como fazer para ordenar ao script que toque uma void depois de algum Tempo?
» [RESOLVIDO] Como fazer o collider seguir a mao do personagem
» [RESOLVIDO] ativar isKinematic por 3 segundos e depois desativar
» como desativar um objeto depois de 5 segundos?
» [RESOLVIDO] Como fazer para ordenar ao script que toque uma void depois de algum Tempo?
» [RESOLVIDO] Como fazer o collider seguir a mao do personagem
» [RESOLVIDO] ativar isKinematic por 3 segundos e depois desativar
» como desativar um objeto depois de 5 segundos?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos