Inimigo segue o player mesmo morto!!!
3 participantes
Página 1 de 1
Inimigo segue o player mesmo morto!!!
Estou utilizando o script aonde o inimigo persegue o personagem, então coloquei uma animação de morte no inimigo, porém quando eu mato o inimigo e ele faz a animação, ele continua seguindo o player mesmo morto!!! Eu gostaria que quando ele ativasse a animação de morte ele parasse de seguir o player, porém não consigo fazer isso!!!
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
olha posso estar extremamete errado mas creio que é algo parecido com esse mini exemplo...
pf alguem com mais experiencia me corrija qualquer coisa ^^
void Death () {
if(health <= 0) {
anim.SetBool("animação de morte", true);
Destroy(gameObject, 2f);
}
}
Obs; sou mega noob ainda, mas vale tentar ajudar =)
pf alguem com mais experiencia me corrija qualquer coisa ^^
void Death () {
if(health <= 0) {
anim.SetBool("animação de morte", true);
Destroy(gameObject, 2f);
}
}
Obs; sou mega noob ainda, mas vale tentar ajudar =)
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
O que você fez é exatamente o que eu tenho ksksksksks. Porem nesses 2 segundos antes dele destruir ele fica me seguindo ainda, eu queria que ele parasse de me seguir...
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
So pra tirar a duvida aqui
ele continua seguindo o player depois que morre ou ele 'para' e a animação de seguir continua?
ele continua seguindo o player depois que morre ou ele 'para' e a animação de seguir continua?
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Não sei se eu entendi muito bem mas você pode usar a variável que ativa a animação para desativar o script que faz o inimigo seguir o player.
também não tenho muita experiência.
também não tenho muita experiência.
Batataaaa- Iniciante
- PONTOS : 1770
REPUTAÇÃO : 0
Idade : 23
Áreas de atuação : Programação em C#
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Assim, ele ativa a animação de morte e o personagem fica deitado como se fosse morto, porem mesmo ele deitado "morto" o seu corpo fica me perseguindo, e eu gostaria que quando ele deitasse "morto" ele parasse de me perseguir!!!speedluk escreveu:So pra tirar a duvida aqui
ele continua seguindo o player depois que morre ou ele 'para' e a animação de seguir continua?
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Fui conseguir entrar só hoje ^^
acredito então que só precise desativar a animação de seguir o player logo depois de ativar a de morte =)
void Death () {
if(health <= 0) {
anim.SetBool("animação de morte", true);
anim.SetBool("animação de seguir", false);
Destroy(gameObject, 2f);
}
}
e no caso se ele seguir ainda se movimentando só zerar a variável de velocidade ou parar o movimento
(obs; só gambiarras de iniciante mesmo ^^ )
acredito então que só precise desativar a animação de seguir o player logo depois de ativar a de morte =)
void Death () {
if(health <= 0) {
anim.SetBool("animação de morte", true);
anim.SetBool("animação de seguir", false);
Destroy(gameObject, 2f);
}
}
e no caso se ele seguir ainda se movimentando só zerar a variável de velocidade ou parar o movimento
(obs; só gambiarras de iniciante mesmo ^^ )
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Não é uma animação de seguir o player, é um script que faz a movimentação e pela Nav Mesh...
Eu utilizo esse script para fazer a movimentação, não sei se você sabe como faz para que quando ativar a animação de morte, a velocidade dele fica =0...
Obs: "Tenho outro script que faz o controle das animações..."
Eu utilizo esse script para fazer a movimentação, não sei se você sabe como faz para que quando ativar a animação de morte, a velocidade dele fica =0...
Obs: "Tenho outro script que faz o controle das animações..."
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.AI;
public class INTELIGENCIA2 : MonoBehaviour {
public Transform Player;
private NavMeshAgent naveMesh;
public float DistanciaDoPlayer, DistanciaDoAIPoint;
public float DistanciaDePercepcao = 30,DistanciaDeSeguir = 20, DistanciaDeAtacar = 2, VelocidadeDePasseio = 3, VelocidadeDePerseguicao = 6,TempoPorAtaque = 1.5f, DanoDoInimigo = 40;
private bool VendoOPlayer;
public Transform[] DestinosAleatorios;
private int AIPointAtual;
private bool PerseguindoAlgo, contadorPerseguindoAlgo,atacandoAlgo,contadorOlhar ;
private float cronometroDaPerseguicao,cronometroAtaque, cronometroOlhar;
public bool BPassear, BOlhar, BPerseguir, BAtacar;
void Start (){
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
naveMesh = transform.GetComponent<NavMeshAgent> ();
}
void Update (){
DistanciaDoPlayer = Vector3.Distance(Player.transform.position,transform.position);
DistanciaDoAIPoint = Vector3.Distance(DestinosAleatorios[AIPointAtual].transform.position,transform.position);
//============================== RAYCAST ===================================//
RaycastHit hit;
Vector3 deOnde = transform.position;
Vector3 paraOnde = Player.transform.position;
Vector3 direction = paraOnde - deOnde;
if(Physics.Raycast (transform.position,direction,out hit,1000) && DistanciaDoPlayer < DistanciaDePercepcao ){
if(hit.collider.gameObject.CompareTag("Player")){
VendoOPlayer = true;
}else{
VendoOPlayer = false;
}
}
//================ CHECHAGENS E DECISOES DO INIMIGO ================//
if(DistanciaDoPlayer > DistanciaDePercepcao && cronometroOlhar < 5){
PerseguindoAlgo = false;
BPassear = true;
Passear();
}
if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir && cronometroOlhar < 5) {
if(VendoOPlayer == true){
BOlhar = true;
Olhar ();
}else{
BPassear = true;
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeSeguir && DistanciaDoPlayer > DistanciaDeAtacar ) {
if(VendoOPlayer == true){
BPerseguir = true;
Perseguir();
PerseguindoAlgo = true;
}else{
BPassear = true;
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeAtacar ) {
BAtacar = true;
Atacar();
}
//COMANDOS DE PASSEAR
if (DistanciaDoAIPoint <= 2) {
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
BPassear = true;
Passear();
}
//CONTADORES DE OLHAR
if (contadorOlhar == true) {
cronometroOlhar += Time.deltaTime;
}
if (cronometroOlhar >= 5 ) {
Perseguir();
}
if (cronometroOlhar >= 8 ) {
contadorOlhar = false;
cronometroOlhar = 0;
Perseguir();
}
//CONTADORES DE PERSEGUICAO
if (contadorPerseguindoAlgo == true) {
cronometroDaPerseguicao += Time.deltaTime;
}
if (cronometroDaPerseguicao >= 5 && VendoOPlayer == false) {
contadorPerseguindoAlgo = false;
cronometroDaPerseguicao = 0;
PerseguindoAlgo = false;
}
// Freio do ATAQUE
if (DistanciaDoPlayer <= DistanciaDeAtacar - 1) {
naveMesh.destination = gameObject.transform.position;
}
// CONTADOR DE ATAQUE
if (atacandoAlgo == true) {
transform.LookAt (new Vector3 (Player.transform.position.x, transform.position.y, Player.transform.position.z));
cronometroAtaque += Time.deltaTime;
}
if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer <= DistanciaDeAtacar) {
atacandoAlgo = true;
cronometroAtaque = 0;
PLAYER.VIDA = PLAYER.VIDA - DanoDoInimigo;
Debug.Log ("recebeuAtaque");
} else if (cronometroAtaque >= TempoPorAtaque && DistanciaDoPlayer > DistanciaDeAtacar) {
atacandoAlgo = false;
cronometroAtaque = 0;
Debug.Log ("errou");
}
}
void Passear (){
BOlhar = false;
BPerseguir = false;
BAtacar = false;
if (PerseguindoAlgo == false) {
naveMesh.acceleration = 5;
naveMesh.speed = VelocidadeDePasseio;
naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
} else if (PerseguindoAlgo == true) {
contadorPerseguindoAlgo = true;
}
}
void Olhar(){
contadorOlhar = true;
BPassear = false;
BPerseguir = false;
BAtacar = false;
naveMesh.speed = 0;
transform.LookAt (Player);
}
void Perseguir(){
BPassear = false;
BOlhar = false;
BAtacar = false;
naveMesh.acceleration = 8;
naveMesh.speed = VelocidadeDePerseguicao;
naveMesh.destination = Player.position;
}
void Atacar (){
BPassear = false;
BOlhar = false;
BPerseguir = false;
atacandoAlgo = true;
}
}
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Oxi coincidentemente mexi nesse mesmo script ontem mesmo mano XD
tenta usar algo assim quando ele morrer...
tenta usar algo assim quando ele morrer...
- Código:
gameObject.GetComponent<NavMeshAgent>().isStopped = true;
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Terei que utilizar essa parte que você passou em qual parte do script? Ou terei que utilizar no script que controla as animações?
Essa é a parte em que faz a animação de morte!!!
Essa é a parte em que faz a animação de morte!!!
- Código:
if (JJ.chamouMorte == true) {
GetComponent<Animator> ().SetBool ("Morte", true);
Debug.Log("chamouMorte");
}
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Olha não sei se entendi muito bem poruqe não vi a void que mata o inimigo no script INTELLIGENCIA2 e o navMesh ta nele
acredito que você tenha um script separado então que controla a vida e chama a void de morte dele
não vou saber explicar com detalhes por falta de conhecimento mesmo ^^ mas se for isso, na void que mata o inimigo você vai ter que pegar do script INTELIGENCIA2 o navmesh
tenta usar isso na void que mata o inimigo, acredito que pode dar um erro sem a referencia do INTELIGENCIA2
if (JJ.chamouMorte == true) {
GetComponent<Animator> ().SetBool ("Morte", true);
(aqui acho que tem que ter a referencia).GetComponent<NavMeshAgent>().isStopped = true;
Debug.Log("chamouMorte");
}
Qualquer coisa desculpa a confusão é porque to saindo do zero tambem com unity e não custa tentar ajudar com pouco que sei ^^
acredito que você tenha um script separado então que controla a vida e chama a void de morte dele
não vou saber explicar com detalhes por falta de conhecimento mesmo ^^ mas se for isso, na void que mata o inimigo você vai ter que pegar do script INTELIGENCIA2 o navmesh
tenta usar isso na void que mata o inimigo, acredito que pode dar um erro sem a referencia do INTELIGENCIA2
if (JJ.chamouMorte == true) {
GetComponent<Animator> ().SetBool ("Morte", true);
(aqui acho que tem que ter a referencia).GetComponent<NavMeshAgent>().isStopped = true;
Debug.Log("chamouMorte");
}
Qualquer coisa desculpa a confusão é porque to saindo do zero tambem com unity e não custa tentar ajudar com pouco que sei ^^
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Muito obrigado, consegui colocando esse código no script de INTELIGENCIA2!!!!
- Código:
if (JJ.chamouMorte == true) {
gameObject.GetComponent<NavMeshAgent>().isStopped = true;
}
Edivandro2706- Avançado
- PONTOS : 2088
REPUTAÇÃO : 4
Respeito as regras :
Re: Inimigo segue o player mesmo morto!!!
Nada feliz em ter ajudado mesmo sabendo pouco
precisando o que tiver no alcance tmj =)
precisando o que tiver no alcance tmj =)
speedluk- Avançado
- PONTOS : 2676
REPUTAÇÃO : 29
Idade : 32
Respeito as regras :
Tópicos semelhantes
» Script de health de inimigo sendo acessado mesmo sem acerta o inimigo
» Inimigo apenas segue o player
» [Problema com c#] Inimigo segue o Player
» [Duvida] Como Player Segue Objeto em 2D
» [RESOLVIDO] Unity2D - O inimigo não para de seguir o player mesmo ele escondido
» Inimigo apenas segue o player
» [Problema com c#] Inimigo segue o Player
» [Duvida] Como Player Segue Objeto em 2D
» [RESOLVIDO] Unity2D - O inimigo não para de seguir o player mesmo ele escondido
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos