有没有一种方法可以通过使用反射来获取使用字符串的方法来访问不同脚本中方法的局部变量?
Is there a way I can access the local variables of a method in a different script by using Reflection to get the method using a string?
我使用的是最新推荐版本的 Unity,我正在尝试访问在不同脚本的方法中本地化的字符串数组。我希望能够使用 System.Reflection 库中的 GetMethod 函数访问该方法。我的脚本中没有任何编译器错误,但每当我尝试测试游戏时,Unity 就会冻结。这是我目前所拥有的:
preMaps = GetComponent<PreMaps>();
MethodInfo Method = preMaps.GetType().GetMethod(mapName);
Method.Invoke(preMaps, null);
foreach (LocalVariableInfo variable in Method.GetMethodBody().LocalVariables)
{
print(variable);
}
我只是放了一个打印行来测试我是否从方法中获取了任何变量,并且我之前在脚本的开头将 preMaps 变量声明为 PreMaps class。 mapName 变量是一个字符串,与另一个脚本中的方法名称相匹配(之前已声明和初始化)。有什么我想念的吗?我已经在没有这些线的情况下对其进行了测试,Unity 不会冻结。
using UnityEngine;
public class PreMaps : MonoBehaviour
{
public class MapName
{
public readonly static string[] map = {
"p,250,110,50,184,10",
"start,10",
"n,0,0,0,100",
"fin"
};
}
}
这就是我尝试访问的其他脚本中的全部内容。
PreMaps.MapName
是 CLASS(类型),而不是 Method!
并且 PreMaps.MapName.map
是 class 中的 FIELD,而不是 LocalVariable!
无论如何,我认为完全没有必要/感觉使用反射 !
你所有的类型和它们的字段都是 public
无论如何,据我所知,绝对没有什么阻碍你简单地做
foreach (var mapValue in PreMaps.MapName.map)
{
Debug.Log(mapValue);
}
我使用的是最新推荐版本的 Unity,我正在尝试访问在不同脚本的方法中本地化的字符串数组。我希望能够使用 System.Reflection 库中的 GetMethod 函数访问该方法。我的脚本中没有任何编译器错误,但每当我尝试测试游戏时,Unity 就会冻结。这是我目前所拥有的:
preMaps = GetComponent<PreMaps>();
MethodInfo Method = preMaps.GetType().GetMethod(mapName);
Method.Invoke(preMaps, null);
foreach (LocalVariableInfo variable in Method.GetMethodBody().LocalVariables)
{
print(variable);
}
我只是放了一个打印行来测试我是否从方法中获取了任何变量,并且我之前在脚本的开头将 preMaps 变量声明为 PreMaps class。 mapName 变量是一个字符串,与另一个脚本中的方法名称相匹配(之前已声明和初始化)。有什么我想念的吗?我已经在没有这些线的情况下对其进行了测试,Unity 不会冻结。
using UnityEngine;
public class PreMaps : MonoBehaviour
{
public class MapName
{
public readonly static string[] map = {
"p,250,110,50,184,10",
"start,10",
"n,0,0,0,100",
"fin"
};
}
}
这就是我尝试访问的其他脚本中的全部内容。
PreMaps.MapName
是 CLASS(类型),而不是 Method!
并且 PreMaps.MapName.map
是 class 中的 FIELD,而不是 LocalVariable!
无论如何,我认为完全没有必要/感觉使用反射 !
你所有的类型和它们的字段都是 public
无论如何,据我所知,绝对没有什么阻碍你简单地做
foreach (var mapValue in PreMaps.MapName.map)
{
Debug.Log(mapValue);
}