Obtener la propiedad de Halo de una luz de punto en Unity

Estoy agregando luces de punto en mi escena (máximo 6) y quiero poder habilitar su propiedad de Halo a través de una secuencia de commands. Sin embargo, en la reference de documentation, no han mencionado cómo habilitar la propiedad de halo de una fuente de luz a través de un script.

Esto es lo que tengo hasta ahora.

GameObject lightObj = new GameObject("Light"); lightObj.AddComponent<Light>(); lightObj.light.color = Color.blue; lightObj.transform.position = city.transform.position + new Vector3(-6.0f,0,0); 

Las luces de punto tienen una propiedad "Draw Halo" en el Inspector, pero ¿cómo lo habilito a través del script?

Por lo que puedo decir de la documentation de la class Halo , las luces hacen algo de magia detrás de las escenas para crear automáticamente un componente Halo, pero lo ocultan de la jerarquía (al igual que AudioSource.PlayOneShot () creará y destruirá nuevas AudioSource automáticamente mientras las oculta de la jerarquía). Parece que el componente Halo no está expuesto. Sin embargo, hay una solución.

En mis testings (usando Unity 4.5.5) usando las respuestas encontradas en este hilo del foro de Unity , no pude acceder al script creado automáticamente a través de Halo, pero si agregué el componente Halo a la luz manualmente (Componente -> Efectos -> Halo ) entonces podría acceder a él a través del script de acuerdo con la respuesta dada por Thundergod44 , que citaré (con modificaciones menores) a continuación:

 //It's possible with C# and System.Reflection: var haloComponent = lightObj.GetComponent("Halo"); var haloEnabledProperty = haloComponent.GetType().GetProperty("enabled"); haloEnabledProperty.SetValue(haloComponent, enable, null); 

Tendrá que replace "habilitar" en la última línea de arriba con un valor boolean. Habilitado es verdadero, deshabilitado es falso.

Es cierto que soy bastante inexperto con luces / halos y reflection, por lo que es posible que tenga más suerte para que las cosas funcionen con el componente Halo creado automáticamente que yo. Pero puedo confirmar que agregar manualmente un componente de Halo te permitirá solucionar este aparente descuido de Unity para exponer el componente de Halo.

Un hecho tangencial que encontré como una explicación interesante de por qué no pude encontrar la manera de agregar un componente de Halo a través de un script es que GetComponent ("Halo"). GetType () devuelve el comportamiento . Es un tipo que nunca había visto antes. Tendrá que saber esto si desea usar un tipado fuerte al declarar variables o get el componente. p.ej:

 Behaviour haloComponent; void Awake() { haloComponent = (Behaviour)lightObj.GetComponent("Halo"); }