Unity C#运行存储在字典中的随机启动例程
我在C#Unity文件中有一本字典,类型为dictionary dic。 我想选择一个随机字符串,将其与枚举数匹配,然后运行协同程序 棘手的部分是我的字典位于不同的脚本中,因此我不确定如何做到这一点 我确实尝试了传入枚举器的字符串,但没有成功+我必须传递参数 我还尝试通过直接访问属性键来访问枚举数,如下所示: 启动例程(File2.enumerator1()),其中File2是我的另一个文件,enumerator1是我试图调用的随机枚举数之一,但这不会太有效,因为Idk指定了哪个枚举数,因此无法指定属性 有什么想法吗Unity C#运行存储在字典中的随机启动例程,c#,unity3d,ienumerator,C#,Unity3d,Ienumerator,我在C#Unity文件中有一本字典,类型为dictionary dic。 我想选择一个随机字符串,将其与枚举数匹配,然后运行协同程序 棘手的部分是我的字典位于不同的脚本中,因此我不确定如何做到这一点 我确实尝试了传入枚举器的字符串,但没有成功+我必须传递参数 我还尝试通过直接访问属性键来访问枚举数,如下所示: 启动例程(File2.enumerator1()),其中File2是我的另一个文件,enumerator1是我试图调用的随机枚举数之一,但这不会太有效,因为Idk指定了哪个枚举数,因此无法
thx我假设您可以访问并能够修改与词典相关的代码?如果是这样,你可以尝试另一种方法。这是您的第二个文件可能喜欢的内容(编辑以演示我使用
Func
的原因):
如下所示,简化版本可能如下所示:
public void SomeMethod ( )
{
var routine = GetRandomRoutine ( );
StartCoroutine ( routine( "Hello!" ) );
}
private Dictionary<string, IEnumerator> _functions;
private string [ ] _directions = { "North", "South", "East", "West" };
private void Start ( )
{
_functions = new Dictionary<string, IEnumerator>
{
[ "North" ] = North ( ),
[ "South" ] = South ( ),
[ "East" ] = East ( ),
[ "West" ] = West ( )
};
}
public IEnumerator North ( ) { yield return null; }
public IEnumerator South ( ) { yield return null; }
public IEnumerator East ( ) { yield return null; }
public IEnumerator West ( ) { yield return null; }
public IEnumerator GetRandomRoutine ( )
{
var direction = _directions [ UnityEngine.Random.Range ( 0, _directions.Length ) ];
if ( _functions.TryGetValue ( direction, out var func ) ) return func;
return null;
}
private Dictionary\u函数;
私有字符串[]_方向={“北”、“南”、“东”、“西”};
私有void开始()
{
_函数=新字典
{
[“北”]=北(),
[“南部”]=南部(),
[“东”]=东(),
[“西”]=西()
};
}
public IEnumerator North(){yield return null;}
public IEnumerator South(){yield return null;}
public IEnumerator East(){yield return null;}
公共IEnumerator West(){yield return null;}
公共IEnumerator GetRandomRoutine()
{
var方向=_方向[UnityEngine.Random.Range(0,_方向.Length)];
if(_functions.TryGetValue(direction,out var func))返回func;
返回null;
}
和的调用方式相同,但不传递任何参数。请给出代码。您不必使用
Func
。只需直接使用IEnumerator
,即可将其传递给start例程
调用,并保存对另一个方法的调用。调用GetRandomRoutine()时,如何传入参数?然后使用中每个枚举数的参数dictionary@GoFast我修改了答案以证明我的初衷,同时也解决了Thomas关于调用额外方法的顾虑。非常感谢!这真的很有帮助,我学到了很多bit@GoFast如果问题得到了回答,就把它标出来,并在下面画一条线。干杯
private Dictionary<string, IEnumerator> _functions;
private string [ ] _directions = { "North", "South", "East", "West" };
private void Start ( )
{
_functions = new Dictionary<string, IEnumerator>
{
[ "North" ] = North ( ),
[ "South" ] = South ( ),
[ "East" ] = East ( ),
[ "West" ] = West ( )
};
}
public IEnumerator North ( ) { yield return null; }
public IEnumerator South ( ) { yield return null; }
public IEnumerator East ( ) { yield return null; }
public IEnumerator West ( ) { yield return null; }
public IEnumerator GetRandomRoutine ( )
{
var direction = _directions [ UnityEngine.Random.Range ( 0, _directions.Length ) ];
if ( _functions.TryGetValue ( direction, out var func ) ) return func;
return null;
}