c# - 有没有办法在不先获取脚本的情况下获取和更改公共变量?
问题描述
我制作了一个按钮,可以激活其他对象。它是一个物理按钮,在这种情况下,通过玩家 GameObject 触摸它来激活它。它使用此脚本来激活其他对象:
public GameObject[] ThingsToActivate = { };
void Update()
{
if (activated)
{
foreach (var Object in ThingsToActivate)
{
Object.GetComponent<foo>().Active = true;
}
}
}
这很好用,但这意味着您放入ThingsToActivate
数组中的所有内容都必须有一个名为foo
. 我想将此按钮放在资产商店中,但我希望它非常易于使用。我想这样做,以便您可以将脚本命名为您想要的任何名称,只要它具有public bool Active
变量即可。
有什么简单的方法可以做到这一点,比如专门为该变量搜索所有脚本,或者某种解决方法?
解决方案
要获取所有组件而不考虑类型,请使用GetComponents<Component>()
.
要检查组件是否具有名为“Active”的属性,请使用GetType().GetProperty("Active")
. 如果它返回一个 PropertyInfo 实例,您可以使用它的SetValue
方法来设置它。
if (activated)
{
foreach (GameObject object in ThingsToActivate)
{
foreach (Component component in object.GetComponents<Component>())
{
var prop = component.GetType().GetProperty("Active");
if (prop != null) prop.SetValue(component, true);
}
}
}
推荐阅读
- opencv - 使用 OpenCV/C++(calibrateCamera) 使用自定义主点校准相机
- java - 如何显示队列中特定车辆的详细信息。用户将输入注册,这将显示该车辆的详细信息
- selenium - 未遵循 testNG 优先级
- arrays - 如何使用循环创建 JButton 数组
- node.js - 如何在 node.js 中等待流式 sql 查询
- react-native - 如何使用 useState 在其他功能之前更新 setState
- javascript - 文本区域中的 v-model / 编辑状态
- import - Azure DevOps 是否具有允许从 Monday.com 导入导出数据的功能
- charts - Google Chart - How to change color of one column only in ComboChart?
- intellij-idea - Setting up JavaFX in IntelliJ - VM options not working at all