O inimigo não ataca
+2
hendrick22
PedroMPT
6 participantes
Página 1 de 1
O inimigo não ataca
Olá eu estou com um problema eu vi o vídeo do marco este aqui: https://youtu.be/rwtZFDJbOGg
Está a funcionar tudo muito bem mas o problema é que o inimigo chega perto do player mas não ataca e o player não perde dana, como resolver? Para o inimigo atacar quando vê o Player
Está a funcionar tudo muito bem mas o problema é que o inimigo chega perto do player mas não ataca e o player não perde dana, como resolver? Para o inimigo atacar quando vê o Player
Re: O inimigo não ataca
vc precisa postar o script pro pessoal analisar ele ver oque tem de errado ,se não a gente não vai saber onde tá o problema
hendrick22- MembroAvançado
- PONTOS : 2688
REPUTAÇÃO : 57
Idade : 25
Respeito as regras :
Re: O inimigo não ataca
Pode ser que você tenha feito alguma coisa de errado, tanto na Unity quanto no script em si. Veja o vídeo novamente :D
Micco- MembroAvançado
- PONTOS : 1790
REPUTAÇÃO : 17
Áreas de atuação : C#, GDScript, HTML e CSS.
Respeito as regras :
Re: O inimigo não ataca
Manda o scriptPedroMPT escreveu:Olá eu estou com um problema eu vi o vídeo do marco este aqui: https://youtu.be/rwtZFDJbOGg
Está a funcionar tudo muito bem mas o problema é que o inimigo chega perto do player mas não ataca e o player não perde dana, como resolver? Para o inimigo atacar quando vê o Player
Re: O inimigo não ataca
- Código:
[size=14]using UnityEngine;
using System.Collections;
public class Inimigo : MonoBehaviour {
public Transform Player;
private UnityEngine.AI.NavMeshAgent naveMesh;
private 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;
private float cronometroDaPerseguicao,cronometroAtaque;
void Start (){
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
naveMesh = transform.GetComponent<UnityEngine.AI.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){
Passear();
}
if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir) {
if(VendoOPlayer == true){
Olhar ();
}else{
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeSeguir && DistanciaDoPlayer > DistanciaDeAtacar) {
if(VendoOPlayer == true){
Perseguir();
PerseguindoAlgo = true;
}else{
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeAtacar) {
Atacar();
}
//COMANDOS DE PASSEAR
if (DistanciaDoAIPoint <= 1) {
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
Passear();
}
//CONTADORES DE PERSEGUICAO
if (contadorPerseguindoAlgo == true) {
cronometroDaPerseguicao += Time.deltaTime;
}
if (cronometroDaPerseguicao >= 5 && VendoOPlayer == false) {
contadorPerseguindoAlgo = false;
cronometroDaPerseguicao = 0;
PerseguindoAlgo = false;
}
// CONTADOR DE ATAQUE
if (atacandoAlgo == true) {
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 (){
if (PerseguindoAlgo == false) {
naveMesh.acceleration = 5;
naveMesh.speed = VelocidadeDePasseio;
naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
} else if (PerseguindoAlgo == true) {
contadorPerseguindoAlgo = true;
}
}
void Olhar(){
naveMesh.speed = 0;
transform.LookAt (Player);
}
void Perseguir(){
naveMesh.acceleration = 8;
naveMesh.speed = VelocidadeDePerseguicao;
naveMesh.destination = Player.position;
}
void Atacar (){
atacandoAlgo = true;
}
}[/size]
RafaelSquid1 escreveu:Manda o scriptPedroMPT escreveu:Olá eu estou com um problema eu vi o vídeo do marco este aqui: https://youtu.be/rwtZFDJbOGg
Está a funcionar tudo muito bem mas o problema é que o inimigo chega perto do player mas não ataca e o player não perde dana, como resolver? Para o inimigo atacar quando vê o Player
Re: O inimigo não ataca
Alguem ajudaPedroMPT escreveu:
- Código:
[size=14]using UnityEngine;
using System.Collections;
public class Inimigo : MonoBehaviour {
public Transform Player;
private UnityEngine.AI.NavMeshAgent naveMesh;
private 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;
private float cronometroDaPerseguicao,cronometroAtaque;
void Start (){
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
naveMesh = transform.GetComponent<UnityEngine.AI.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){
Passear();
}
if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir) {
if(VendoOPlayer == true){
Olhar ();
}else{
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeSeguir && DistanciaDoPlayer > DistanciaDeAtacar) {
if(VendoOPlayer == true){
Perseguir();
PerseguindoAlgo = true;
}else{
Passear();
}
}
if (DistanciaDoPlayer <= DistanciaDeAtacar) {
Atacar();
}
//COMANDOS DE PASSEAR
if (DistanciaDoAIPoint <= 1) {
AIPointAtual = Random.Range (0, DestinosAleatorios.Length);
Passear();
}
//CONTADORES DE PERSEGUICAO
if (contadorPerseguindoAlgo == true) {
cronometroDaPerseguicao += Time.deltaTime;
}
if (cronometroDaPerseguicao >= 5 && VendoOPlayer == false) {
contadorPerseguindoAlgo = false;
cronometroDaPerseguicao = 0;
PerseguindoAlgo = false;
}
// CONTADOR DE ATAQUE
if (atacandoAlgo == true) {
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 (){
if (PerseguindoAlgo == false) {
naveMesh.acceleration = 5;
naveMesh.speed = VelocidadeDePasseio;
naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
} else if (PerseguindoAlgo == true) {
contadorPerseguindoAlgo = true;
}
}
void Olhar(){
naveMesh.speed = 0;
transform.LookAt (Player);
}
void Perseguir(){
naveMesh.acceleration = 8;
naveMesh.speed = VelocidadeDePerseguicao;
naveMesh.destination = Player.position;
}
void Atacar (){
atacandoAlgo = true;
}
}[/size]RafaelSquid1 escreveu:Manda o scriptPedroMPT escreveu:Olá eu estou com um problema eu vi o vídeo do marco este aqui: https://youtu.be/rwtZFDJbOGg
Está a funcionar tudo muito bem mas o problema é que o inimigo chega perto do player mas não ataca e o player não perde dana, como resolver? Para o inimigo atacar quando vê o Player
Re: O inimigo não ataca
da algum erro?, ja colocou o debug.Log no if do physics.raycast pra ver se realmente esta collidinddo, ou debug.drawRay pra checar se o raio esta na direçao certa,
geramente eu uso o debug em tudo pra ver se ta calculado tudo certo,kk
Editado: script testado,em um cenario simples e funcionando, o dano dado ao player aparece no console da unity, testado na versão 5,
boa tarde,
geramente eu uso o debug em tudo pra ver se ta calculado tudo certo,kk
Editado: script testado,em um cenario simples e funcionando, o dano dado ao player aparece no console da unity, testado na versão 5,
boa tarde,
Re: O inimigo não ataca
Não dá erro, como eu uso o debugFelipeSouza11 escreveu:da algum erro?, ja colocou o debug.Log no if do physics.raycast pra ver se realmente esta collidinddo, ou debug.drawRay pra checar se o raio esta na direçao certa,
geramente eu uso o debug em tudo pra ver se ta calculado tudo certo,kk
Editado: script testado,em um cenario simples e funcionando, o dano dado ao player aparece no console da unity, testado na versão 5,
boa tarde,
pedroPTgames- Iniciante
- PONTOS : 1995
REPUTAÇÃO : 2
Idade : 24
Respeito as regras :
Re: O inimigo não ataca
pedroPTgames escreveu:Não dá erro, como eu uso o debugFelipeSouza11 escreveu:da algum erro?, ja colocou o debug.Log no if do physics.raycast pra ver se realmente esta collidinddo, ou debug.drawRay pra checar se o raio esta na direçao certa,
geramente eu uso o debug em tudo pra ver se ta calculado tudo certo,kk
Editado: script testado,em um cenario simples e funcionando, o dano dado ao player aparece no console da unity, testado na versão 5,
boa tarde,
usa se "Debug.Log("sua mensagem aqui");" serve pra identificar se os "if" ou funcoes tao sendo chamadas em algum momento/parte no script, se aparecer a mensagem no console da unity é porque ta funcionando de boa (aquela parte do codigo tá normal, pode se notar que no script tem esse metodo pra checar se há erros,
Re: O inimigo não ataca
Tive agora a ver o script e ele tem o Debug.Log("recebeuAtaque")FelipeSouza11 escreveu:pedroPTgames escreveu:Não dá erro, como eu uso o debugFelipeSouza11 escreveu:da algum erro?, ja colocou o debug.Log no if do physics.raycast pra ver se realmente esta collidinddo, ou debug.drawRay pra checar se o raio esta na direçao certa,
geramente eu uso o debug em tudo pra ver se ta calculado tudo certo,kk
Editado: script testado,em um cenario simples e funcionando, o dano dado ao player aparece no console da unity, testado na versão 5,
boa tarde,
usa se "Debug.Log("sua mensagem aqui");" serve pra identificar se os "if" ou funcoes tao sendo chamadas em algum momento/parte no script, se aparecer a mensagem no console da unity é porque ta funcionando de boa (aquela parte do codigo tá normal, pode se notar que no script tem esse metodo pra checar se há erros,
pedroPTgames- Iniciante
- PONTOS : 1995
REPUTAÇÃO : 2
Idade : 24
Respeito as regras :
Tópicos semelhantes
» Inimigo ataca ao ver a luz
» Quando o inimigo ataca todos os inimigos ativam a animação
» Script de health de inimigo sendo acessado mesmo sem acerta o inimigo
» inimigo atacar
» Personagem não sair da tela
» Quando o inimigo ataca todos os inimigos ativam a animação
» Script de health de inimigo sendo acessado mesmo sem acerta o inimigo
» inimigo atacar
» Personagem não sair da tela
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos