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);
}
}
}
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
Sólo texto | Texto con Imágenes