Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ramunda en Junio 26, 2015, 12:43:31 AM

Título: Duda distancia de ataque
Publicado por: ramunda en Junio 26, 2015, 12:43:31 AM
Muy buenas a todos, tengo un dilema que parece una tontería pero me lleva de cabeza.

using UnityEngine;
using System.Collections;
public class skellyattack6 : MonoBehaviour {
   public GameObject player;
   public GameObject skelly6;
   public float distance;
   public PlayerInfo character;
   
   // Use this for initialization
   void Start () {
   }
   
   // Update is called once per frame
   void Update () {
      
   player = GameObject.FindWithTag("jugador");
   skelly6 = GameObject.FindWithTag("Troll");
   distance = Vector3.Distance(player.transform.position,skelly6.transform.position);
      
      if (distance <= 3) {
      skelly6.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
      skelly6.GetComponent<Animation>().CrossFade("Attack_01");
      character.ApplyDamage(1);
      character.playerInCombat(1);
      }
      else if (distance < 3 && distance > 3.0f) {
      skelly6.GetComponent<Animation>().CrossFadeQueued("Attack_01", 0.3f, QueueMode.PlayNow);
      skelly6.GetComponent<Animation>().CrossFade("Run");
      skelly6.transform.LookAt(player.transform.position);
         transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 0.30f);
         //character.playerInCombat(1);
         
      }   
      else
      {
      skelly6.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
      skelly6.GetComponent<Animation>().CrossFade("Idle_01");
      character.playerInCombat(1);
      }
   }
   
   
}

Este script, lo que hace es que si el bixo o lo que sea , se encuentra en un rango de distancia =X y entras en ese rango, se activan las animaciones X te persigue y te ataca y cuando sales de ese rango se para.
 
Bien, pues por mucho que le cambio el valor: 
 
if (distance <= 3) {
skelly6.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
 
Para que me detecte y venga corriendo hacia mi no aumenta el radio de detección.
 
Deberia ser asi? o estoy cambiando el valor que no es?
 
Si alguien se le ocurre agradecería la ayuda.
 
Gracias de antemano.
 
 
 
 
Título: Duda distancia de ataque
Publicado por: esr en Junio 26, 2015, 09:53:58 AM
Vale creo que tu problema esta en el segundo if (else if (distance < 3 && distance > 3.0f) {) esa linea no tiene sentido la distancia nunca podra ser mayor y menos que tres a la vez, en ese if no puede entrar nunca. De todas formas utiliza Debug.log para depurar y saber a que distancia se encuentra en cada momento.
 
Despues te daria algunos consejos, si vas poner el player como una variable global inicializalo en el start te estaras ahorrando rendimiento al no tener que buscar el jugador en cada iteracion, segundo si es un script de un enemigo este tendra que ir enlazado al enemigo, por lo que no necesitas tener una instancia de este en el, ademas con ese codigo no vas a poder poner mas de un "skelly6" y una menor si la distancia solo la utilizas en el update declarala solo en el update.
 
Saludos.
Título: Duda distancia de ataque
Publicado por: ramunda en Junio 26, 2015, 01:46:31 PM
Cita de: esr date=1435305238Vale creo que tu problema esta en el segundo if (else if (distance < 3 && distance > 3.0f) {) esa linea no tiene sentido la distancia nunca podra ser mayor y menos que tres a la vez, en ese if no puede entrar nunca. De todas formas utiliza Debug.log para depurar y saber a que distancia se encuentra en cada momento.
 
Despues te daria algunos consejos, si vas poner el player como una variable global inicializalo en el start te estaras ahorrando rendimiento al no tener que buscar el jugador en cada iteracion, segundo si es un script de un enemigo este tendra que ir enlazado al enemigo, por lo que no necesitas tener una instancia de este en el, ademas con ese codigo no vas a poder poner mas de un "skelly6" y una menor si la distancia solo la utilizas en el update declarala solo en el update.
 
Saludos.
Antes de nada gracias por responder @esr (http://unityspain.com/profile/25806-esr/) , entiendo lo que me dices pero me pierdo en el camino soy bastante novato en esto...lo del skelly 6 lo que ago es crear mas scripts iguales cambiando los skelly6 por 7 etc en todas las directrices.El tema que me comentas de lo de la distancia serias tan amable de darme una soluciñon en codigo que pueda aplicarla y funcione, que bien como te digo me cae grande y estoy parado por esto.....por favor.
 
Un saludo.
 
Vale..despues de hacer unas pruebas .....esta linea:

else if (distance < 30 && distance > 3.0f) {
skelly6.GetComponent<Animation>().CrossFadeQueued("Attack_01", 0.3f, QueueMode.PlayNow);

Si le cambias el valor este caso donde pone "30" que estaba en 3, que mirando antes de toquetar estaba en 15......si que te detecta mucho antes y empieza a correr hacia mi, pero....sigue corriendo y no ataca como hacia antes ...lo cual no deberia ser asi ya que estamos en distancia menos de 30 y mas de 3.....
 
Ideas???
 
Título: Duda distancia de ataque
Publicado por: ramunda en Junio 26, 2015, 03:12:05 PM
Solucionado!!! , aumentando en 4f y 4f en las lineas y anumentando la distancia a 50 funciona perfectamente
 
Quedo asi la cosa_

if (distance <= 4) {
      skelly6.GetComponent<Animation>().CrossFadeQueued("Run", 0.3f, QueueMode.PlayNow);
      skelly6.GetComponent<Animation>().CrossFade("Attack_01");
      character.ApplyDamage(1);
      character.playerInCombat(1);
      }
      else if (distance < 50 && distance > 4.0f) {

Muchas gracias por las ideas