Noticias

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

que estoy haciendo mal?, (SOLUCIONADO)

Iniciado por ramunda, Diciembre 01, 2015, 06:51:34 PM

Tema anterior - Siguiente tema
Diciembre 01, 2015, 06:51:34 PM Ultima modificación: Diciembre 01, 2015, 08:43:26 PM por ramunda
Hola muy buenas, tengo una duda y es que no se que estoy haciendo mal , me explico simple:creo un private gameobject para que no tenga que ponerlo cada vez y lo busque el script y así me evito ponerlo en cada enemigo.en este caso sangre.bien una vez definido y especificado (por gametag y nombre)le digo que lo active y desactive según necesidad.bien pues me tira error que no esta definido.Antes lo hacia con public y arrastraba el gameobject(sangreok, asi se llama) manualmente pero es un rollo para cada enemigo hacer eso , de echo realice lo mismo con el player y me funciona. Bien les dejo el script aver si me dan una luz 
using UnityEngine;
using System.Collections;
public class skellyattackgoul : MonoBehaviour {
public EnemyType myEnemyType;
private GameObject player;
private float distance;
public int damage =(10);
private GameObject sangre;
  //////  aqui el sangre
private PlayerInfo character;
private Animation myAnimation;
private float timer=0;
private bool shotdamage=true;

void Start () {
   player = GameObject.Find ("Jugador");
   sangre = GameObject.Find ("sangreok"); ////aqui el nombre de el gameobject con mismo tag.
   character = player.GetComponent<PlayerInfo>();
   myAnimation = gameObject.GetComponent<Animation>();
}

   // Update is called once per frame
   void Update () {
   if (!shotdamage) {
      timer += Time.deltaTime;
      if (timer >= 3) {
         shotdamage = true;
         timer = 0;
         sangre.SetActive(false);   ////desactivo
      }
   }
         

   distance = Vector3.Distance(player.transform.position,gameObject.transform.position);
      
      if (distance <= 3) {
      myAnimation.CrossFadeQueued("run", 0.3f, QueueMode.PlayNow);
      myAnimation.CrossFade("attack1");
      if (shotdamage) {
         shotdamage = false;
         sangre.SetActive(true); //// activo
         character.ApplyDamage (damage);
         //player.GetComponent<BloodSplat2>().enabled = true;
      }
   }

      
      else if (distance < 45 && distance > 3.0f) {
      myAnimation.CrossFadeQueued("attack1", 0.3f, QueueMode.PlayNow);
      myAnimation.CrossFade("run");
      gameObject.transform.LookAt(player.transform.position);
      transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 0.2f);
      character.playerInCombat(true);
         
      }   
      else
      {
      //GetComponent<FollowPath>().enabled = true;
      myAnimation.CrossFadeQueued("run", 0.3f, QueueMode.PlayNow);
      myAnimation.CrossFade("idle");
      //player.GetComponent<BloodSplat2>().enabled = false;
      character.playerInCombat(true);
      }
   }
   
   
}
   

Diciembre 01, 2015, 08:03:11 PM #1 Ultima modificación: Diciembre 01, 2015, 08:10:09 PM por kaito
GameObject.Find devuelve nulo si el GameObject que se busca se encuentra desactivado. SOLUCION: Emparenta el GameObject sangreok dentro de un empty GameObject que se encuentre siempre activo, y utiliza:
sangre = GameObject.Find("parentSangreok").transform.GetChild(0).gameObject;
 

[quote author=kaito" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34576" data-ipsquote-contentcommentid="124391">GameObject.Find devuelve nulo si el GameObject que se busca se encuentra desactivado. SOLUCION: Emparenta el GameObject sangreok dentro de un empty GameObject que se encuentre siempre activo, y utiliza:
sangre = GameObject.Find("parentSangreok").transform.GetChild(0).gameObject
								

Etiquetas: