Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
3 participantes
Página 1 de 1
Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
Como eu posso definir um código do OnTriggerEnter2D para um Collider específico e definir um outro OnTriggerEnter2D para um outro Collider específico?
Vou explicar melhor:
No meu jogo, existe o "Inimigo", e esse inimigo tem 3 Colliders:
-Um Box Collider SEM o Is Trigger estar ativado (para o Inimigo não atravessar as paredes).
-Um Box Collider COM o Is Trigger ativado (para o tiro matar ele caso a munição acerte esse Box Collider).
-Um Circle Collider COM o Is Trigger ativado (para que caso o player entre nessa área do Circle Collider o inimigo começar a perseguir o player).
Para o inimigo começar a perseguir o player eu usei o seguinte código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inimigo : MonoBehaviour
{
public float vel = 1.0f;
public Transform Personagem;
public bool liberaPer = false;
public float distancia;
public bool Vivo = true;
void Start()
{
}
void Update()
{
distancia = Vector2.Distance(this.transform.position, Personagem.transform.position);
if(liberaPer == true && Vivo == true)
{
transform.position = Vector2.MoveTowards(this.transform.position, Personagem.transform.position, vel * Time.deltaTime);
}
}
void OnTriggerEnter2D(Collider2D outro)
{
if(outro.gameObject.CompareTag("Player"))
{
liberaPer = true;
}
}
}
Para o inimigo morrer com o tiro da munição eu usei esse código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InimigoVida : MonoBehaviour
{
public bool Vivo = true;
public Image lifeBar;
public int valorAtual = 3;
public int dano = 1;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void OnTriggerEnter2D(Collider2D outro)
{
if(outro.gameObject.CompareTag("Muniçao"))
{
if(valorAtual > 0)
{
valorAtual -= dano;
lifeBar.fillAmount = (float)valorAtual / 3;
}
else if(valorAtual <= 0)
{
Vivo = false;
Destroy(gameObject);
}
}
}
}
Mas acontece que, toda vez que eu atiro no meu inimigo a munição acaba acertando no Circle Collider (que é o responsável pela perseguição do player).
Então como eu posso definir um código do OnTriggerEnter2D para um Collider específico e definir um outro OnTriggerEnter2D para um outro Collider específico?
Então fiz o seguinte:
Criei um GameEmpty e coloquei como filho no Inimigo na Hierarchy e coloquei o código de Perseguição no GameEmpty e também coloquei o Circle Collider com o Trigger ativado
Mas o problema é que quem começa a perseguir o jogador é o próprio GameEmpty, e não sei como modificar o script para fazer o Inimigo perseguir o personagem.
Se alguém puder me explicar como modificar esse script para fazer o inimigo perseguir o personagem ficarei muito agradecido.
Aqui está o código de perseguição:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inimigo : MonoBehaviour
{
public float vel = 1.0f;
public Transform Personagem;
public bool liberaPer = false;
public float distancia;
public bool Vivo = true;
void Start()
{
}
void Update()
{
distancia = Vector2.Distance(this.transform.position, Personagem.transform.position);
if(liberaPer == true && Vivo == true)
{
transform.position = Vector2.MoveTowards(this.transform.position, Personagem.transform.position, vel * Time.deltaTime);
}
}
void OnTriggerEnter2D(Collider2D outro)
{
if(outro.gameObject.CompareTag("Player"))
{
liberaPer = true;
}
}
}
Vou explicar melhor:
No meu jogo, existe o "Inimigo", e esse inimigo tem 3 Colliders:
-Um Box Collider SEM o Is Trigger estar ativado (para o Inimigo não atravessar as paredes).
-Um Box Collider COM o Is Trigger ativado (para o tiro matar ele caso a munição acerte esse Box Collider).
-Um Circle Collider COM o Is Trigger ativado (para que caso o player entre nessa área do Circle Collider o inimigo começar a perseguir o player).
Para o inimigo começar a perseguir o player eu usei o seguinte código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inimigo : MonoBehaviour
{
public float vel = 1.0f;
public Transform Personagem;
public bool liberaPer = false;
public float distancia;
public bool Vivo = true;
void Start()
{
}
void Update()
{
distancia = Vector2.Distance(this.transform.position, Personagem.transform.position);
if(liberaPer == true && Vivo == true)
{
transform.position = Vector2.MoveTowards(this.transform.position, Personagem.transform.position, vel * Time.deltaTime);
}
}
void OnTriggerEnter2D(Collider2D outro)
{
if(outro.gameObject.CompareTag("Player"))
{
liberaPer = true;
}
}
}
Para o inimigo morrer com o tiro da munição eu usei esse código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InimigoVida : MonoBehaviour
{
public bool Vivo = true;
public Image lifeBar;
public int valorAtual = 3;
public int dano = 1;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void OnTriggerEnter2D(Collider2D outro)
{
if(outro.gameObject.CompareTag("Muniçao"))
{
if(valorAtual > 0)
{
valorAtual -= dano;
lifeBar.fillAmount = (float)valorAtual / 3;
}
else if(valorAtual <= 0)
{
Vivo = false;
Destroy(gameObject);
}
}
}
}
Mas acontece que, toda vez que eu atiro no meu inimigo a munição acaba acertando no Circle Collider (que é o responsável pela perseguição do player).
Então como eu posso definir um código do OnTriggerEnter2D para um Collider específico e definir um outro OnTriggerEnter2D para um outro Collider específico?
Então fiz o seguinte:
Criei um GameEmpty e coloquei como filho no Inimigo na Hierarchy e coloquei o código de Perseguição no GameEmpty e também coloquei o Circle Collider com o Trigger ativado
Mas o problema é que quem começa a perseguir o jogador é o próprio GameEmpty, e não sei como modificar o script para fazer o Inimigo perseguir o personagem.
Se alguém puder me explicar como modificar esse script para fazer o inimigo perseguir o personagem ficarei muito agradecido.
Aqui está o código de perseguição:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inimigo : MonoBehaviour
{
public float vel = 1.0f;
public Transform Personagem;
public bool liberaPer = false;
public float distancia;
public bool Vivo = true;
void Start()
{
}
void Update()
{
distancia = Vector2.Distance(this.transform.position, Personagem.transform.position);
if(liberaPer == true && Vivo == true)
{
transform.position = Vector2.MoveTowards(this.transform.position, Personagem.transform.position, vel * Time.deltaTime);
}
}
void OnTriggerEnter2D(Collider2D outro)
{
if(outro.gameObject.CompareTag("Player"))
{
liberaPer = true;
}
}
}
54Geovane54- Iniciante
- PONTOS : 1016
REPUTAÇÃO : 2
Respeito as regras :
Re: Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
porque não usar o OnCollisionEnter para detectar o projetil, Ou talver use o Vector3.Distance para verificar a distancia entre o Npc e o player
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: Como posso definir um código OnTriggerEnter2D para 2 Colliders específicos?
Eu nunca fiz com o Collider2d mas já com o 3d, deve ser a mesma lógica.
Bom, eu crio um script que vai ficar nos 2 emptys dentro do objeto pai, ou seja cada empty desse vai ser um trigger, no caso vai ter um BoxTrigger neles..., você entendeu.... kkkk
ai no script eu coloco uma public string nome;
e também coloco o OnTriggerEnter()....
dentro do trigger coloco dois ifs para verificar, se quem colidiu foi fulano 1 ou fulano 2, verificando nele mesmo, assim:
if(transform.getcomponent<meuScript>.nome == "fulano1")
{
faz o que quiser com o Other
}
if(mesmacoisa.nome == "fulano2")
....
assim vc faz uma coisa expecífica para cada trigger, sabendo quem foi q acionou algo
Bom, eu crio um script que vai ficar nos 2 emptys dentro do objeto pai, ou seja cada empty desse vai ser um trigger, no caso vai ter um BoxTrigger neles..., você entendeu.... kkkk
ai no script eu coloco uma public string nome;
e também coloco o OnTriggerEnter()....
dentro do trigger coloco dois ifs para verificar, se quem colidiu foi fulano 1 ou fulano 2, verificando nele mesmo, assim:
if(transform.getcomponent<meuScript>.nome == "fulano1")
{
faz o que quiser com o Other
}
if(mesmacoisa.nome == "fulano2")
....
assim vc faz uma coisa expecífica para cada trigger, sabendo quem foi q acionou algo
Tópicos semelhantes
» Spawn Random simultâneo em pontos específicos
» Dúvida. Colliders no Unity3D
» CharacterController não interage com Box Colliders.
» [iniciante] Como gerar 3 valores específicos aleatoriamente sem repetir?
» [RESOLVIDO] Sistema básico em C# - Objetos aparecerem em lugares específicos
» Dúvida. Colliders no Unity3D
» CharacterController não interage com Box Colliders.
» [iniciante] Como gerar 3 valores específicos aleatoriamente sem repetir?
» [RESOLVIDO] Sistema básico em C# - Objetos aparecerem em lugares específicos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos