如何更改 Point Light 中 'Draw Halo' 的值 - Unity3D

How can I change the value of 'Draw Halo' inside Point Light - Unity3D

我似乎在智能感知中找不到 Draw Halo 属性。有没有办法以编程方式设置它的值?谢谢!

Halo 是一个单独的组件。

给灯光添加光晕:AddComponent<Halo>()

要访问附加到灯的光环:GetComponent<Halo>()

检查器中的 "Draw Halo" 复选框有点转移注意力——它创建了一个 Halo 组件,然后从层次结构视图中隐藏该组件,该视图是愚蠢的,但它从旧版本中保留下来Unity 版本。

更新:

public Component AddComponent(string className); 

现已弃用并删除,因此不能再用于执行此操作。看看我做的扩展方法,叫做 AddComponentExt 可以用来做这个 .

答案是使用:gameObject.AddComponentExt("Halo");


旧答案

即使已经回答了这个问题,我认为其他 运行 参与其中的人也会很有用。

除了回答,

Haloclass不能像其他组件一样直接访问.

GetComponent 函数有两个重载:

public Component GetComponent(Type type);
public Component GetComponent(string type);

AddComponent 函数的两个重载:

public Component AddComponent(Type componentType);
public Component AddComponent(string className);

您必须使用带有 string 参数的 GetComponentAddComponent 而不是带有 Type 参数的那个。

GetComponent("Halo");AddComponent("Halo"); 编译。

GetComponent<Halo>();AddComponent<Halo>(); 编译。

此外,您需要使用反射来通过 enabling/disabling 打开和关闭 Halo

通过反射切换 Halo on/off 的扩展方法:

public static class ExtensionMethod
{
    public static void drawHalo(this Light light, bool value)
    {
        //Get Halo Component
        object halo = light.GetComponent("Halo");
        //Get Enable Halo property
        var haloInfo = halo.GetType().GetProperty("enabled");
        //Enable/Disable Halo
        haloInfo.SetValue(halo, value, null);
    }
}

用法:

Light light = GameObject.Find("Point light").GetComponent<Light>();
light.drawHalo(true); //Extension function. pass true or false

注意

确保在使用此功能之前将 Halo 附加到 Light。 Select 你的灯,然后转到 Component -> Effects -> Halo。您也可以使用 yourLight.AddComponent("Halo");.

从脚本中执行此操作