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 : 1070
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 : 3603
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
» me ajudem, dem uma dica de como posso fazer um limitador para esse codigo
» Como definir limites de zoom para um objeto inspecionado?
» Como faço para limitar a movimentação (Touch) de um personagem a 3 pontos específicos? Unity C#
» Como faço para o código funcionar só em um objeto?
» Como faço para configurar o axes por código ?
» Como definir limites de zoom para um objeto inspecionado?
» Como faço para limitar a movimentação (Touch) de um personagem a 3 pontos específicos? Unity C#
» Como faço para o código funcionar só em um objeto?
» Como faço para configurar o axes por código ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos