Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ramunda en Julio 09, 2015, 03:22:09 PM

Título: Clonar enemigo....
Publicado por: ramunda en Julio 09, 2015, 03:22:09 PM
Holaaaaaaa ya estoy aqui de nuevo necesitando de vuestros sabios consejos....
 
Vereis me cree un enemigo que al detectarme, al jugador en este caso a una distancia x se me tira encima y me empieza a pegar mamporrios hasta que muero o lo mato.
 
Esto funciona de perlas, lo logreee
 
 
La cosa es que dentro de mi ignorancia dije si tengo 1...puedo hacer 100?, lo convierto en gameobject lo clono y listo?
 
 
Pues no....si lo duplico ni se mueve ni ataca ni nada!!!.
 
 
Ver el script y explico lo que tengo que hacer para que funcione.

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

bien , la unica manera de que me funciones es cambiando algunos nombres de el script tales como:
 
La public class a un mumero mas de el que tenia por ej:
 
public class skellyattack : MonoBehaviour {
 

 
public class skellyattack1 : MonoBehaviour {
 
tambin el public GameObject skelly;
 

 
public GameObject skelly1;
 
y asi sucesivamente y funcionan individualmemente pero es un toston hacerlos uno por uno....
 
 
Veis alguna forma de que se pueda clonar sin tener que hacerlos a mano cada 1?
 
 
el resto de el script funciona bien simpre y cuando le respete las variables que he comentado antes osea en cada script la 1, 2l 2 etc.
 
 
Gracias de antemano!!!!
 
 
 
 
 
Título: Clonar enemigo....
Publicado por: elanguido en Julio 09, 2015, 05:41:11 PM
Lo primero que te diría es que ese script en su conjunto deja mucho que desear, veo que estás bastante verde en programación Unity básica. te recomiendo que hagas algún curso sobre el tema antes de meterte a hacer cosas complejas, los hay gratuitos en youtube. De todas formas, ahí va una solución rápida:
 
El problema lo tienes en esta línea:
 
skelly = GameObject.FindWithTag("skelly1");
 
Lo que hace esa linea es buscar el objeto que tenga el tag "skelly1" y luego más abajo comparas la distancia de ese objeto con el player. El tema es que si hay más de un objeto con ese tag, siempre te va a obtener el primero de ellos.
 
Este script lo tienes asignado al enemigo verdad? si es así, sustituye esa línea por esta otra:
 
skelly = gameObject;
 
Si no tienes el script asignado al enemigo... mal vamos xD
Título: Clonar enemigo....
Publicado por: ramunda en Julio 09, 2015, 06:29:27 PM
Cita de: elanguido date=1436456471Lo primero que te diría es que ese script en su conjunto deja mucho que desear, veo que estás bastante verde en programación Unity básica. te recomiendo que hagas algún curso sobre el tema antes de meterte a hacer cosas complejas, los hay gratuitos en youtube. De todas formas, ahí va una solución rápida:
 
El problema lo tienes en esta línea:
 
skelly = GameObject.FindWithTag("skelly1");
 
Lo que hace esa linea es buscar el objeto que tenga el tag "skelly1" y luego más abajo comparas la distancia de ese objeto con el player. El tema es que si hay más de un objeto con ese tag, siempre te va a obtener el primero de ellos.
 
Este script lo tienes asignado al enemigo verdad? si es así, sustituye esa línea por esta otra:
 
skelly = gameObject;
 
Si no tienes el script asignado al enemigo... mal vamos xD
 
Hola @elanguido (http://unityspain.com/profile/22270-elanguido/), gracias por tan pronta respuesta y si efectivamente estoy verde verde en esto , pero gracias a ti y a los demas voy aprendiendo a pasos agigantados dentro de mi inexperiencia.
 
Y si , y si efectivamente funciona!!!
 
Ya tengo un ejercito de esqueletos trotando por el mundo hahhahaha.
 
Muchas gracias y un abrazo!!!