Problemas com a AI/ENEMY
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Problemas com a AI/ENEMY
Marcos, quando a vida do Meu Jogador chegar a 0 setei ele para carregar o menu do jogo, até ai tudo bem:
A Animação tá boa, o som da morte também tinha setado, tudo normal
Qual é o problema?
Quando vou carregar a mesma cena denovo, a vida do personagem já vem em 0, já começa zerada
Fazendo com que eu e volte pro menu
Não se aplica somente a essa cena:
Qualquer cena que tenha o Script PLAYER
A Vida do script vai começar em 0
Como se o Unity salvasse a vida existente da cena anterior
Tipo um DontDestroyOnLoad
Segue o Script:
Esse de cima é o do antigo...
A Animação tá boa, o som da morte também tinha setado, tudo normal
Qual é o problema?
Quando vou carregar a mesma cena denovo, a vida do personagem já vem em 0, já começa zerada
Fazendo com que eu e volte pro menu
Não se aplica somente a essa cena:
Qualquer cena que tenha o Script PLAYER
A Vida do script vai começar em 0
Como se o Unity salvasse a vida existente da cena anterior
Tipo um DontDestroyOnLoad
Segue o Script:
- Código:
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using UnityEngine.UI;
public class PLAYER : MonoBehaviour {
public Animator AnimaçãoDaMuerte;
public CharacterMotor Você;
public GameObject DesativarPassos;
public string CarregarOQue;
public Vignetting EscurecerTelaDoJooj;
public MouseLook OlharDoMouse1;
public MouseLook OlharDoMouse2;
public Image SangueNaTela;
public int VidaParaRegenerar = 2;
public AudioSource SomDaMorte;
public CharacterMotor Velocidade;
public GameObject ReverbZone1;
public GameObject ReverbZone2;
public GameObject ReverbZone3;
public AudioSource DesativarOSomDeDanoBaixo;
public AudioSource DesativarOSomDeDanoCima;
public MenuPause Pause1;
public MenuPause2 Pause2;
public MenuPause3 Pause3;
public MenuPause4 Pause4;
public MenuPause5 Pause5;
public float VIDA = 100;
void Awake (){
SangueNaTela.enabled = false;
SomDaMorte.enabled = false;
ReverbZone1.SetActive (false);
ReverbZone2.SetActive (false);
ReverbZone3.SetActive (false);
}
void Update (){
if (VIDA != 100) {
StartCoroutine ("DiminuirVelocidade");
SangueNaTela.enabled = true;
ReverbZone1.SetActive (true);
EscurecerTelaDoJooj.intensity = 16;
StartCoroutine ("Regenerar");
} else {
SangueNaTela.enabled = false;
ReverbZone1.SetActive (false);
EscurecerTelaDoJooj.intensity = 0;
StopCoroutine ("Regenerar");
StopCoroutine ("DiminuirVelocidade");
if (VIDA <= 50) {
EscurecerTelaDoJooj.intensity = 20;
ReverbZone2.SetActive (true);
} else {
EscurecerTelaDoJooj.intensity += 0;
ReverbZone2.SetActive (false);
}
}
if (VIDA <= 20) {
EscurecerTelaDoJooj.intensity = 32;
ReverbZone3.SetActive (true);
} else {
EscurecerTelaDoJooj.intensity += 0;
ReverbZone3.SetActive (false);
}
if (VIDA == 100) {
Debug.Log ("VidaRestaurada");
}
if (VIDA >= 100) {
VIDA = 100;
}
if (VIDA <= 0) {
LaMuerte();
DesativarOSomDeDanoBaixo.enabled = false;
DesativarOSomDeDanoCima.enabled = false;
StopCoroutine ("Regenerar");
SomDaMorte.enabled = true;
StartCoroutine ("VoltarParaUmMenu");
Debug.Log ("Faliceu!");
}
}
void LaMuerte(){
AnimaçãoDaMuerte.enabled = true;
Destroy (Pause1);
Destroy (Pause2);
Destroy (Pause3);
Destroy (Pause4);
Destroy (Pause5);
Você.canControl = false;
OlharDoMouse1.enabled = false;
OlharDoMouse2.enabled = false;
DesativarPassos.SetActive (false);
}
IEnumerator VoltarParaUmMenu(){
yield return new WaitForSeconds (3.0f);
SceneManager.LoadScene (CarregarOQue);
}
IEnumerator Regenerar(){
yield return new WaitForSeconds (10.0f);
VIDA += VidaParaRegenerar;
}
IEnumerator DiminuirVelocidade(){
Velocidade.movement.maxForwardSpeed = 1.2f;
Velocidade.movement.maxSidewaysSpeed = 1.2f;
Velocidade.movement.maxBackwardsSpeed = 1.2f;
yield return new WaitForSeconds (4.0f);
Velocidade.movement.maxForwardSpeed = 1.5f;
Velocidade.movement.maxSidewaysSpeed = 1.5f;
Velocidade.movement.maxBackwardsSpeed = 1.5f;
}
}
- Código:
///Segue abaixo:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(AudioSource))]
public class NovoScriptDeInimigo : MonoBehaviour {
public Transform Player;
private 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;
public AudioClip SomDeDano;
private bool PerseguindoAlgo, contadorPerseguindoAlgo,atacandoAlgo;
private float cronometroDaPerseguicao,cronometroAtaque;
public GlitchEffect RapidoEfeitoDeGlitch;
///ADICIONEI ESSE
public float cronometroVer;
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){
Passear();
}
if (DistanciaDoPlayer <= DistanciaDePercepcao && DistanciaDoPlayer > DistanciaDeSeguir) {
if(VendoOPlayer == true){
//ADICIONEI AQUI MEU BLOCO
cronometroVer+=Time.deltaTime;
if (cronometroVer>5)
{
cronometroVer=0;
naveMesh.acceleration = 5;
naveMesh.speed = VelocidadeDePasseio;
naveMesh.destination = DestinosAleatorios [AIPointAtual].position;
}
else{
// FIM DO MEU BLOCO ADICIONADO
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 <= 2) {
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;
StartCoroutine ("Glitch");
GetComponent<AudioSource> ().PlayOneShot (SomDeDano);
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;
}
IEnumerator Glitch(){
RapidoEfeitoDeGlitch.enabled = true;
yield return new WaitForSeconds (0.05f);
RapidoEfeitoDeGlitch.enabled = false;
}
}
//Valeu a atencao!
Esse de cima é o do antigo...
GamersBR- Membro
- PONTOS : 3150
REPUTAÇÃO : 3
Respeito as regras :
Re: Problemas com a AI/ENEMY
tente fazer no metodo Awake a vida receber o valor cheio.
e dentro do Update faz um return caso a vida seja menor ou igual a zero e se ja chamou o StartCoroutine, acho que deve funcionar.
e dentro do Update faz um return caso a vida seja menor ou igual a zero e se ja chamou o StartCoroutine, acho que deve funcionar.
Re: Problemas com a AI/ENEMY
Engraçado amigo, que agora sumiu depois que tirei o fato dela ser estáticaManawydan escreveu:tente fazer no metodo Awake a vida receber o valor cheio.
e dentro do Update faz um return caso a vida seja menor ou igual a zero e se ja chamou o StartCoroutine, acho que deve funcionar.
GamersBR- Membro
- PONTOS : 3150
REPUTAÇÃO : 3
Respeito as regras :
Re: Problemas com a AI/ENEMY
Queria deixar vocês sabendo que a mesma coisa se aplica para o Script Antigo do Marcos, o da visão noturna
A Cada load, o tempo de duração dela diminuia, ficava menor
Chegava um ponto que em 10 segundos acabava
Não é o que tem a câmera e tudo mais
É Aquele script mais antigo que acho que combinou bem com meu jogo
A Cada load, o tempo de duração dela diminuia, ficava menor
Chegava um ponto que em 10 segundos acabava
Não é o que tem a câmera e tudo mais
É Aquele script mais antigo que acho que combinou bem com meu jogo
GamersBR- Membro
- PONTOS : 3150
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» Enemy IA 1x1 movement!?
» erro AI Enemy
» Ajuda Enemy AI
» AI Enemy Ajuda
» [RESOLVIDO] Enemy IA e Portas
» erro AI Enemy
» Ajuda Enemy AI
» AI Enemy Ajuda
» [RESOLVIDO] Enemy IA e Portas
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos