Noticias

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

Problemas spawneando enemigo.

Iniciado por marketxu, Julio 22, 2016, 11:04:50 AM

Tema anterior - Siguiente tema
hola, buenas. El tema es que tengo este sistema para spawnear enemigos o grupos de enemigos.
 

using UnityEngine;
using System.Collections;
public class EnemySpawner : MonoBehaviour
{
public GameObject enemyPrefab;
public Transform enemyPosReference;

private void OnTriggerEnter(Collider collider)
{
   if (collider.gameObject.tag == "Player")
   {
      SpawnEnemy ();
      Destroy (this.gameObject);
   }
}

private void SpawnEnemy ()
{
   GameObject enemy = Instantiate (enemyPrefab) as GameObject;
   enemy.transform.position = enemyPosReference.position;
   enemy.transform.rotation = enemyPosReference.rotation;
}
}

 
y cargo a un enemigo concreto como es este. 
 

var funcion : int = 1;
var VelMov : float = 2.5;
var RotSpeed : float = 2.5;
private var RotInic : Quaternion;
var gravity : float = 9.8;
var Damage : float = 1.0;
var DistanciaPara***guir : float = 10.0;
var DistanciaParaQuedarseQuieto : float = 15.5;
var Jugador : Transform;
private var Distancia : float;
var DistanciaAtaque : float = 3;
var quietoAnim : String = "";
var caminarAnim : String = "";
var atacarAnim : String = "";
var fireRate = 1;
var footRate = 0.5;
private var nextFire = 0.0;
var Ragdoll : GameObject;
var SonidosZombie : AudioClip[];
var SonidoAtaqueZombie : AudioClip;
var SonidoPasosZombie : AudioClip;
var ZombieMesh : GameObject;
var ScoreObject : GameObject;
var Dinero : GameObject;
enum tieneDineroj {si = 1, no = 2}
var tieneDinero : tieneDineroj = tieneDineroj.no;
var puntajeDelZombie : int = 1;
var Vida : float = 30.0;
var controller : CharacterController;
var lugarRagDoll : Transform;
function Start(){
controller = GetComponent(CharacterController);
tieneDinero = Random.Range(1, 2);
funcion = 1;
//var Buscar : GameObject = gameObject.FindWithTag("Player");
//Jugador = Buscar.transform;
RotInic = transform.rotation;
if(funcion == 1){
   audio.loop = false;
   while(true){
      audio.clip = SonidosZombie[Random.Range(, SonidosZombie.length)];
      
      if (audio.clip)
      {
         audio.Play();
         yield WaitForSeconds(audio.clip.length);
      }
      else
      {
         yield;
      }
   }
}
}
private var MorirA : boolean = true;
function Update(){
if(Jugador) //**mod
{
Distancia = Vector3.Distance(Jugador.transform.position, transform.position);

if(funcion == 1){
   ZombieMesh.animation.Play(quietoAnim);
   if(Distancia < DistanciaPara***guir){
      funcion = 2;
   }
   if(Distancia > DistanciaPara***guir){
      funcion = 1;
   }
}

if(funcion == 2){
   if (Time.time > nextFire) {
      nextFire = Time.time + footRate;
      audio.clip = SonidoPasosZombie;
      audio.Play();
   }
   ZombieMesh.animation.Play(caminarAnim, PlayMode.StopAll);
   transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Jugador.transform.position - transform.position), RotSpeed * Time.deltaTime);
   transform.rotation.x = RotInic.x;
   transform.rotation.z = RotInic.z;
   controller.Move(transform.forward * VelMov * Time.deltaTime);
    controller.Move(transform.up * -gravity * Time.deltaTime);
   if(Distancia > DistanciaParaQuedarseQuieto){
      funcion = 1;
   }
 }
   
if(Distancia <= DistanciaAtaque){
   funcion = 4;
}

if(funcion == 4){
   transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Jugador.transform.position - transform.position), RotSpeed * Time.deltaTime);
   transform.rotation.x = RotInic.x;
   transform.rotation.z = RotInic.z;
   
   if (Time.time > nextFire) {
      nextFire = Time.time + fireRate;
      ZombieMesh.animation.Play(atacarAnim, PlayMode.StopAll);
      Jugador.SendMessage("ApplyDamage", Damage);
//         Debug.Log("Attack!");
      audio.clip = SonidoAtaqueZombie;
      audio.Play();
   }
   
   if(Distancia > DistanciaAtaque){
      funcion = 2;
   }
}
}
if(Vida <= && MorirA == true)
   Die();
}
function ApplyDamage(Damage : float){
Vida -= Damage;
}
function Die(){
MorirA = false;
Destroy(this.gameObject.GetComponent(CharacterController));
var RIG : GameObject = Instantiate(Ragdoll, lugarRagDoll.transform.position,  lugarRagDoll.transform.rotation);
//**   Ragdoll.Find("master/reference/Hips/Spine/Spine1/Spine2/Neck/Head").rigidbody.AddForce(-transform.forward * 1000);

//   ScoreObject.SendMessage("BajasZombies", 1);
//   ScoreObject.SendMessage("Total", puntajeDelZombie);
Destroy(this.gameObject);

}
 
//**@script RequireComponent(CharacterController);
@script RequireComponent(AudioSource);

 
el problema biene, que si coloco la ia directamente , funciona perfectamente, pero si la spawneo, no me roconoce al player y vamos que no va bien. ¿alguna pista?

En tu script también tienes las mismas líneas comentadas? Porque a primera vista parece que la variable Jugador no la inicializas en el Start, entonces siempre será false y nunca te entrará en el if...

creo que no te sigo.si esa es la ia que uso y como gameobject si me funciona. ¿como añadiría esto? 

Me refiero a que tienes una condición al principio del Update, si Jugador no es null entra en la condición, pero en el Start tienes las líneas comentadas que sirven para referenciar la variable Jugador.
 
Cita de: marketxu date=1469178290

//var Buscar : GameObject = gameObject.FindWithTag("Player");
//Jugador = Buscar.transform;

   
       
   


Esto respondería por qué al instanciar no encuentra el player...

Etiquetas: