Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Dudas sobre qué métodos usar

Iniciado por Biarox1166, Julio 28, 2016, 04:09:58 AM

Tema anterior - Siguiente tema
Julio 28, 2016, 04:09:58 AM Ultima modificación: Septiembre 16, 2016, 02:23:42 PM por pioj
Hola, quería ver si alguien me puede decir qué es mejor a la hora de hacer una script de detección(en este caso, para detectar al jugador) y de paso sacarme algunas dudas con respecto a las animaciones y movimiento. Las forma que uso es mediante un trigger(sphere collider), la cosa es que quizás hay un método mejor o más practico. Les dejo la script que hice:
 

using UnityEngine;
using System.Collections;
public class ControladorEnemigo : MonoBehaviour {
public enum Estado{
   Idle,
   Corre,
   Ataca1,
   Ataca2,
   Baila,
}
public Estado EstadoActual;
public Animator ani;
public Rigidbody rb;
public Transform Player;
public float velocidad;
public float Damage;
public float MaxCercania;
public bool Detectado;
 
// Use this for initialization
void Start () {

   Detectado = false;
   ani = GetComponent<Animator>();
   rb = GetComponent<Rigidbody>();
   EstadoActual = Estado.Idle;
}

// Update is called once per frame
void Update () {
   float Distancia = Vector3.Distance(transform.position, Player.position);
   if(EstadoActual == Estado.Ataca1){
      ani.Play("AtaqueBase");
   }
   if(EstadoActual == Estado.Ataca2){
      ani.Play("AtaqueMax");
   }
   if(Detectado){
         transform.LookAt(Player);
      if(Distancia < MaxCercania){             
         StartCoroutine(TiempoAtack());
         }
         else{
         if(Distancia > MaxCercania){                              
            rb.AddForce(transform.forward * velocidad);                
            ani.Play("Correr");
            EstadoActual = Estado.Corre;
         }
      }
   }
   RaycastHit hit;
   if(Physics.Raycast(transform.position, transform.forward, out hit, 2)){
      if (hit.collider.tag == "Jack"){
         SaludyMana.Salud -= Damage * Time.deltaTime;
      }
   }
}
IEnumerator TiempoAtack () {
   EstadoActual = Estado.Ataca1;
   yield return new WaitForSeconds(3);
   EstadoActual = Estado.Ataca2;
   //yield return new WaitForSeconds(3);
}
void OnTriggerEnter(Collider other){
   if(other.tag == "Jack"){
      Detectado = true;
   }
}
/*void OnTriggerExit(Collider other){
   if(other.tag == "Jack"){
      Detectado = false;
   }
}*/
 
}

 
AVISO: lo de los estado los puse nada más que para ver como eran XD(lo ví en un video pero no es algo que use a futuro).
 
Como ven es algo bastante simple pero bueno, ahora les digo mis otras dudas:
 

  1.    Con respecto al daño, esta bien el uso de ray´s? Ya que no se si(al tener muchos enemigos en escena) me baje el rendimiento, porque leí que los ray´s estan constantemente haciendo cálculos(disculpen si dije cualquier cosa XD).¿Alguna idea para mejorar eso?


  2.    ¿Hay alguna forma de utilizar los "WaitforSecond" sin el uso de corutinas?Ya que en la scripting reference de Unity(mi biblia durante todo esto jaja) muestra su uso con corutinas y como no conozco muy bien sobre ellas(osea ví videos y demás pero sigo sin entender su uso ) quizas me complique más adelante.


  3.    ¿Ahora con respecto a el movimiento está bien el uso de AddForce?


  4.    Y mi última duda y no jodo más, como pueden ver con las animaciones(Uso un controller que hice) pero no utilicé transiciones ya que no me gusta usar lo de los parámetros y eso, por eso, reproduzco los "States" con la variable "Play" del animator. La cosa es que Dispongo de dos ataques: el base(uno simple el cual repito un par de veces) y el Max(que quiero que lo haga por ejemplo, después de X "ataques base"). Lo que no sé como hacer, es obtener la información de cuántas veces se reprodujo la animación base(creo que se hace con una variable llamada "StateInfo" o algo así pero no se bien cómo implementarla) y cómo "pararla"(si es que se está reproduciendo) para que de paso a la animación Max.


Ufff ajajaj, disculpen si escribí mucho pero quiero aprender bien esto que siempre me detiene a la hora de programar. De antemano gracias 
 

Etiquetas: