Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取调用方法';游戏对象信息_C#_Unity3d - Fatal编程技术网

C# 获取调用方法';游戏对象信息

C# 获取调用方法';游戏对象信息,c#,unity3d,C#,Unity3d,我有一个自定义脚本作为组件附加到游戏对象上 假设是游戏对象G1和组件C1 在组件C1中,它有一个调用另一个游戏对象(G2)并将其活动设置为false的方法 游戏对象G2有另一个组件脚本C2,在这个脚本中,在OnEnable()方法中,我试图获取调用脚本的游戏对象,以便引用它 我尝试过使用反射,比如 System.Diagnostics.StackTrace()).GetFrame(1).GetMethod(). 我可以获得调用方法名reflectType,但无法引用实际的游戏对象(G1) 我有

我有一个自定义脚本作为组件附加到游戏对象上 假设是游戏对象G1和组件C1

在组件C1中,它有一个调用另一个游戏对象(G2)并将其活动设置为false的方法 游戏对象G2有另一个组件脚本C2,在这个脚本中,在OnEnable()方法中,我试图获取调用脚本的游戏对象,以便引用它

我尝试过使用反射,比如

System.Diagnostics.StackTrace()).GetFrame(1).GetMethod().
我可以获得调用方法名reflectType,但无法引用实际的游戏对象(G1) 我有没有其他方法可以达到这个要求?tks

仅供参考,我不能简单地使用参数的原因是(G1和C1)是我从Assetstore下载的第三方脚本,我只是不想修改它的源代码,不幸的是调用方法不是重写方法

回答下面的一些评论:

组件(C1)是assetstore中的第三方脚本,我可以肯定地对其进行编辑,但我不想这样做,因为作者可以在下次更新时更新此C1,而且很难遵循

C1有一个公共字段来分配“Gameobject”,它有一个私有方法来调用该Gameobject的“SetActive”函数

例如,我将G2拖到该字段,因此C1私有方法可以在必要时将其设置为active(true)

问题在于,在这个资产插件中,有太多游戏对象附加了这个C1脚本,而我的设计是将我的G2游戏对象拖到每个脚本的公共字段中

然后,只有当我能从G2>C2中获得一个参考来确定哪个游戏对象的C1正在调用


希望我能解释清楚,并提前感谢:)

C2
中添加一个可公开编辑的字段/属性,然后编辑
C1
在组件上设置它,如果它存在:
if(target.TryGetComponent(out C2 otherComponent)){C2.activationgameobject=gameObject;}
C1如何调用C2?这是一个单位事件吗?为什么不在C2中添加一个引用C1的字段?有点不清楚是什么和为什么。听起来你最好使用你调用的静态控制器或扩展,而不是直接调用对象。将呼叫者和接收者都传递给所述控制器或分机,然后使用该控制器或分机通过在停用g2之前将游戏对象传递给c2来执行所需的操作