[RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
Olá, estou trabalhando em um script para matar os inimios no jogo, o script funciona mas em apenas um inimigo, como posso proceder para que funcione em todos?
Eu declarei um raycast
if(hit.collider.name == "HeadShot")
{
Inimigo inimigo = FindObjectOfType<Inimigo>();
inimigo.Morreu();
}
depois setei o script do meu inimigo onde tem o metodo que o faz morrer, funcionou, o problema é que só funciona no inimigo "original", eu dupliquei esse inimigo, mas quando atiro em suas copias, sempre quem morre é o primeiro inimigo no qual eu dupliquei.
Eu declarei um raycast
if(hit.collider.name == "HeadShot")
{
Inimigo inimigo = FindObjectOfType<Inimigo>();
inimigo.Morreu();
}
depois setei o script do meu inimigo onde tem o metodo que o faz morrer, funcionou, o problema é que só funciona no inimigo "original", eu dupliquei esse inimigo, mas quando atiro em suas copias, sempre quem morre é o primeiro inimigo no qual eu dupliquei.
ronigleydson- Avançado
- PONTOS : 2183
REPUTAÇÃO : 23
Respeito as regras :
Re: [RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
quando você acerta o inimigo, você tá procurando um objeto do tipo inimigo pra chamar o morreu, mas você não está especificando qual inimigo.
use o hit.collider pra pegar a referência do script do Inimigo, ao invés do find, use o getcomponent.
hit.collider.gameobject.getcom...
use o hit.collider pra pegar a referência do script do Inimigo, ao invés do find, use o getcomponent.
hit.collider.gameobject.getcom...
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
Então eu substitui oFagner escreveu:quando você acerta o inimigo, você tá procurando um objeto do tipo inimigo pra chamar o morreu, mas você não está especificando qual inimigo.
use o hit.collider pra pegar a referência do script do Inimigo, ao invés do find, use o getcomponent.
hit.collider.gameobject.getcom...
Inimigo inimigo = findObject.GetCom...
Por
hit.collider.gameObject.GetComponent<Inimigo>().Morreu();
Mas deu o seguinte erro
NullReferenceException: Object referencie nota set to an instance of an Object.
ronigleydson- Avançado
- PONTOS : 2183
REPUTAÇÃO : 23
Respeito as regras :
Re: [RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
Então, o erro de referência nula pode ser que seu objeto "HeadShot" não tem o script Inimigo.
Eu evitaria checar pelo nome, tentaria pegar direto pelo componente, e se este não fosse nulo, chamaria o método;
Eu evitaria checar pelo nome, tentaria pegar direto pelo componente, e se este não fosse nulo, chamaria o método;
- Código:
RaycastHit hit;
if(Physics.Raycast(transform.position, transform.forward, out hit, 10))
{
Inimigo inimigo = hit.collider.gameObject.GetComponent<Inimigo>();
if (inimigo != null)
{
inimigo.Morreu();
}
}
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
A sim, o script Inimigo fica no personagem, o HeadShot é um objeto vazio que coloquei dentro da cabeça do inimigo e adicionei uma esfera de colisão para detectar apenas o HeadShot. Vc está certo pois testando aqui, quando atiro nós inimigos agora está dando tudo certo, a única parte que não está perfeita é que os inimigos morrem com tiros em qualquer lugar do corpo e não apenas na cabeça.Fagner escreveu:Então, o erro de referência nula pode ser que seu objeto "HeadShot" não tem o script Inimigo.
Eu evitaria checar pelo nome, tentaria pegar direto pelo componente, e se este não fosse nulo, chamaria o método;
- Código:
RaycastHit hit;
if(Physics.Raycast(transform.position, transform.forward, out hit, 10))
{
Inimigo inimigo = hit.collider.gameObject.GetComponent<Inimigo>();
if (inimigo != null)
{
inimigo.Morreu();
}
}
ronigleydson- Avançado
- PONTOS : 2183
REPUTAÇÃO : 23
Respeito as regras :
Re: [RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
Ao invés de acessar o script do inimigo, você acessa o Zonahit e chama o ReceberDano(), use isso aqui em cada parte do corpo, nela você vai definir quanto de dano cada parte vai dar no inimigo, ex: cabeça = 100, braco = 20...
Ele vai tentar acessar o script do inimigo pra passar esse valor do dano e se o HP for 0, ele chama o Morrer();
Ele vai tentar acessar o script do inimigo pra passar esse valor do dano e se o HP for 0, ele chama o Morrer();
- Código:
using UnityEngine;
public class ZonaHit : MonoBehaviour
{
public float valorDano;
public void ReceberDano()
{
transform.root.GetComponent<Inimigo>().RemoverHP(valorDano);
}
}
- Código:
using UnityEngine;
public class Inimigo : MonoBehaviour
{
public float HP = 100;
public void RemoverHP(float valor)
{
HP = Mathf.Max(HP - valor, 0);
if (HP == 0)
{
Morrer();
}
}
private void Morrer()
{
}
}
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: [RESOLVIDO] Ajuda com script para matar Inimigo no Jogo
Ficou perfeito agora, não tem erro nenhum e funciona como eu queria, valeu msm. Me ajudou muito. ObrigadoFagner escreveu:Ao invés de acessar o script do inimigo, você acessa o Zonahit e chama o ReceberDano(), use isso aqui em cada parte do corpo, nela você vai definir quanto de dano cada parte vai dar no inimigo, ex: cabeça = 100, braco = 20...
Ele vai tentar acessar o script do inimigo pra passar esse valor do dano e se o HP for 0, ele chama o Morrer();
- Código:
using UnityEngine;
public class ZonaHit : MonoBehaviour
{
public float valorDano;
public void ReceberDano()
{
transform.root.GetComponent<Inimigo>().RemoverHP(valorDano);
}
}
- Código:
using UnityEngine;
public class Inimigo : MonoBehaviour
{
public float HP = 100;
public void RemoverHP(float valor)
{
HP = Mathf.Max(HP - valor, 0);
if (HP == 0)
{
Morrer();
}
}
private void Morrer()
{
}
}
ronigleydson- Avançado
- PONTOS : 2183
REPUTAÇÃO : 23
Respeito as regras :
Tópicos semelhantes
» ajuda com script de inimigo para fazer com que ele só ataque quando ver o player
» [RESOLVIDO] Destruir um inimigo e mudar de cena para o fim do jogo
» (AJUDA) script de câmera para jogo 2d
» [RESOLVIDO] Score ao matar inimigo
» [RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
» [RESOLVIDO] Destruir um inimigo e mudar de cena para o fim do jogo
» (AJUDA) script de câmera para jogo 2d
» [RESOLVIDO] Score ao matar inimigo
» [RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos