Unity C#运行存储在字典中的Random StartCoroutine

问题描述

我在C#Unity文件上有一个字典,类型为 Dictionary dic 。 我想选择一个随机字符串,将其与枚举器匹配,然后运行协程。

棘手的部分是我的词典位于其他脚本中,,所以我不确定如何做到这一点。

我确实尝试了传入枚举器的字符串,但这没用+我必须传递参数。

我还尝试通过直接访问属性键来访问枚举数:

StartCoroutine(File2.enumerator1()),其中File2是我尝试的另一个文件,而enumerator1是我尝试调用随机枚举器中的1个,但这并不太有效,因为Idk哪个枚举器被选中,因此无法指定该属性

有什么想法吗?

thx

解决方法

我认为您可以访问并且有能力修改与词典相关的代码?如果是这样,您可以尝试另一种方法。这就是您的第二个文件所希望的(编辑以证明我使用Func的原因):

    private Dictionary<string,Func<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 ( string message ) { Debug.Log ( $"North and \"{message}\"" ); yield return null; }
    public IEnumerator South ( string message ) { Debug.Log ( $"South and \"{message}\"" ); yield return null; }
    public IEnumerator East ( string _ ) { yield return null; }
    public IEnumerator West ( string _ ) { yield return null; }

    public Func<string,IEnumerator> GetRandomRoutine ( )
    {
        var direction = _directions [ UnityEngine.Random.Range ( 0,_directions.Length ) ];
        if ( _functions.TryGetValue ( direction,out var func ) ) return func;
        return null;
    }

然后您将在第一个文件中这样调用它:

    public void SomeMethod ( )
    {
        var routine = GetRandomRoutine ( );
        StartCoroutine ( routine( "Hello!" ) );
    }

如下所示,简化版本可能如下所示:

    private Dictionary<string,IEnumerator> _functions;
    private string [ ] _directions = { "North",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,out var func ) ) return func;
        return null;
    }

以相同的方式被调用,但是没有传递任何参数。