Noticias

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

GetComponent Error

Iniciado por fdeluna, Agosto 21, 2015, 01:08:13 PM

Tema anterior - Siguiente tema
Hola buenas tardes.Llevo un par de días atascado por un GetComponent que no funciona correctamente.Mi problema y mi duda es la siguiente:Usado gameObject.GetComponent("Script") todo funciona correctamente.Usado gameObject.GetComponent<Script>() el debugger me dice que se lanza una excepción que no he conseguido ver cual es. Muchas gracias de ante mano. PD:Uso C# para los scripts  

Agosto 21, 2015, 01:21:39 PM #1 Ultima modificación: Agosto 21, 2015, 01:25:24 PM por Antonio
No sé qué clase de problema puedes estar teniendo, a mi me funciona bien:

Ejemplo:
using UnityEngine;
using System.Collections;

public class Player_Stats : MonoBehaviour 
{
   Animator anim;
   Player_Controller PC;
   Player_Input PI;
   Cam_FreeLook CamFunctions;
   Enemy_Ragdoll rM;

   void Start ()
   {
      if (GetComponent<Enemy_Ragdoll>())
      {
         rM= GetComponent<Enemy_Ragdoll>();
      }
      if (GetComponent<Player_Input>())
      {
         PI = GetComponent <Player_Input>();
      }
      PC = GetComponent <Player_Controller>();
      CamFunctions = Camera.main.GetComponentInParent <Cam_FreeLook>();

      anim = GetComponent<Animator>();
   }
}
   

Te pongo los dos casos en lo que me pasa.caso 1 
  void OnTriggerEnter(Collider co)
    {
        if(co.tag == "Player")
        {
            co.GetComponent<PlayerController>(); // (ESTO NO RULA)
        }
       
    }
 caso 2
PlayerController player;

void OnStart()
{
    player = GameObject.FindGameObjectsWithTag("Player").GetComponent<PlayerController>(); // Esto no funca
    player = GameObject.FindGameObjectsWithTag("Player").GetComponent("PlayerController"); // Estoy si funca
}
 Es que es muy raro al final tendré que usar GetComponent("String") pero me gustaría evitarlo gracias por la ayuda

Agosto 21, 2015, 01:52:04 PM #3 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Creo que no son problemas del Get Component en sí.

En el caso 1, Estas accediendo al componente, pero no estás haciendo nada con él. Tendrías que hacer algo como: 
player = co.GetComponent<PlayerController>();
co.GetComponent<PlayerController>().MovementSpeed -= 10; //Suponiendo que PlayerController tuviera alguna variable pública llamada MovementSpeed
co.GetComponent<PlayerController>().DetenerInput(); //Suponiendo que PlayerController tuviera alguna función pública llamada DetenerInput
  En cuanto al 2º caso, puede que no esté encontrando el objeto "Player" adecuado, estás usando la función 
FindGameObjectsWithTag
Que devuelve un array de objetos, ahí pues se puede quedar un poco en duda a la hora de, ¿A cual de ellos le aplicamos el GetComponent?. Puede que lo que quisieras usar fuese el:
FindGameObjectWithTag
Que sí localiza un sólo objeto individual.

¿puede ser eso? O.ò

Estoy en el curro. Llego a casa y pongo el código exacto. Que he escrito el post rápido y corriendo sorry

Etiquetas: