【发布时间】:2017-02-21 11:17:14
【问题描述】:
我似乎无法在智能感知中找到 Draw Halo 属性。有没有办法以编程方式设置其值?谢谢!
【问题讨论】:
我似乎无法在智能感知中找到 Draw Halo 属性。有没有办法以编程方式设置其值?谢谢!
【问题讨论】:
更新:
public Component AddComponent(string className);
现在已弃用并删除,因此不能再用于执行此操作。看看我做的扩展方法,叫做AddComponentExt,可以用来做这个here。
答案是使用:gameObject.AddComponentExt("Halo");
老答案:
即使已经回答了这个问题,我认为其他遇到这个问题的人也会很有用。
除了rutter's的回答,
Halo 类不能像其他组件一样直接访问。
GetComponent 函数有两个重载:
public Component GetComponent(Type type);
public Component GetComponent(string type);
AddComponent 函数的两个重载:
public Component AddComponent(Type componentType);
public Component AddComponent(string className);
您必须将GetComponent 和AddComponent 与string 参数一起使用,而不是与Type 参数一起使用。
GetComponent("Halo"); 和 AddComponent("Halo"); 将编译。
GetComponent<Halo>(); 和 AddComponent<Halo>(); 将不会编译。
此外,您需要通过启用/禁用反射来打开和关闭Halo。
通过反射打开/关闭 Halo 的扩展方法:
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。
选择你的灯光,然后转到 Component -> Effects -> Halo。您也可以使用 yourLight.AddComponent("Halo"); 从脚本中执行此操作。
【讨论】:
Halo 是一个单独的组件。
为灯光添加光晕:AddComponent<Halo>()
要访问附加到灯光的光环:GetComponent<Halo>()
检查器中的“Draw Halo”复选框有点像红鲱鱼 - 它创建了一个 Halo 组件,然后从层次结构视图中隐藏,这是愚蠢的,但它从旧版本的 Unity 中保留。
【讨论】: