提问人:makeITwork 提问时间:9/20/2023 最后编辑:makeITwork 更新时间:9/20/2023 访问量:41
尝试访问自定义 Unity 组件脚本中的变量
Trying to access vars within Custom Unity Component Script
问:
我遇到了尝试访问存储在脚本组件中的变量的情况。
玩家可以对 gameObject 执行大约 8 个操作。 用户将这些操作脚本附加到控制操作方式的游戏对象。
在游戏过程中,我需要遍历 gameObject 的组件,并将选定的 Action 与附加的组件相匹配。我已经成功找到了附加到组件的相应操作脚本,但我无法找到其中包含的变量。
// LOOP THROUGH THISEL COMPONENTS
var thisElComps=thisEl.GetComponents<Component>();
for(var i=0; i<thisElComps.Length; i++){
var thisComp=thisElComps[i].GetType();
// IF COMPONENT MATCHES ACTIVE SELECTED ACTION
if(activeVerb.name == thisComp.ToString()){
print("found");
// need to access settings inside component here!
// if(thisComp.myVar){};
// SELECTED ACTION COMPONENT NOT FOUND
}else{
print("not found");
}
}
Found 和 Not Found 正在正确打印,但我尝试过的所有内容似乎都无法访问组件内的变量:/对不起,新手问题,但我是 C# 的新手,来自不同的语言。谢谢
更新:为了示例起见,这里是一个附加的组件脚本。
public class ActionClassName: MonoBehaviour {
public string myVar;
}
thisComp.myVar;(错误:没有 myVar 的定义)
print(thisElComps[i] 是 Component); 返回 true
更新:
typeName="myAction";
var myComp=thisEl.GetComponent("myAction");
发现!
var myComp=thisEl.GetComponent(System.Type.GetType(typeName));
错误:类型不能为 null
答:
C# 不像 Javascript!C# 是强类型的,这意味着为了访问您的,您肯定需要一个类型的引用(o 派生自该引用)myVar
whatever
您投射并检查哪个没有/知道 .Component
myVar
实际上,如果您只对特定类型感兴趣,为什么还要遍历所有组件呢?
var thisElComps = thisEl.GetComponents<whatever>();
foreach(var thisComp in thisElComps)
{
if(activeVerb.name == thisComp.ToString())
{
print("found");
if(thisComp.myVar)
{
...
}
}
}
您还可以加入一些对第一个匹配项感兴趣的 onl 或使用 Linq FirstOrDefault
。break
*但是,进一步注意 return the same as which return same as that that arethisComp.ToString()
thisComp.name
thisComp.gameObject.name
thisEl.name
=> 检查将始终同时通过或失败所有项目thisElComps
如果你想再次通过字符串找到特定类型的组件,你可以简单地使用字符串重载并执行
var theComp = thisEl.GetComponent(activVerb.name) as whatever;
if(theComp)
{
print("found");
print(theComp.myVar);
}
else
{
print("not found");
}
评论
whatever
whatever
GetComponent(s)
myAction
ActionClassName
;)
评论
(MyDerivedComponent)thisElComps[i];