Unity3D将字符串插入数组

时间:2013-12-18 02:34:21

标签: arrays unity3d unityscript

我正在使用Unity3D 4.2,并有一个按钮来触发:

function SubmitMove()
{
p1cube = new Array ();
p2cube = new Array ();
    var allCubeList = GameObject.FindGameObjectsWithTag("cube");
    for(var allCube: GameObject in allCubeList) 
        {
        if(allCube.GetComponent(CubeARDP).cubeState == "1")
        {
        p1cube.Push(allCube.name);
        }
        else if(allCube.GetComponent(CubeARDP).cubeState == "2")
        {
        p2cube.Push(allCube.name);
        }
        }

}

那么p1cube.Push(allCube.name);如何给我一些错误:

MissingMethodException: System.String[].Push
Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher ()
Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.Create ()
Boo.Lang.Runtime.RuntimeServices.DoCreateMethodDispatcher (System.Object target, System.Type targetType, System.String name, System.Object[] args)
Boo.Lang.Runtime.RuntimeServices.CreateMethodDispatcher (System.Object target, System.String name, System.Object[] args)
Boo.Lang.Runtime.RuntimeServices+<Invoke>c__AnonStorey15.<>m__9 ()
Boo.Lang.Runtime.DynamicDispatching.DispatcherCache.Get (Boo.Lang.Runtime.DynamicDispatching.DispatcherKey key, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.GetDispatcher (System.Object target, System.Object[] args, System.String cacheKeyName, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args)
UnityScript.Lang.UnityRuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args, System.Type scriptBaseType)
axisrotateDynamicParenting.SubmitMove () (at Assets/component_tested/axisrotateDynamicParenting.js:468)
axisrotateDynamicParenting.OnGUI () (at Assets/component_tested/axisrotateDynamicParenting.js:285)

知道发生了什么事吗?我检查了Unity脚本参考,无论我做什么似乎都没问题。任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:1)

看起来p1cube不是常规的JS数组;不知何故,你有一个原生的.NET数组。那些不可调整大小,因此没有Push方法(因为按定义“推”使数组更长)。

我现在正在解析文档,请原谅我的猜测。但似乎如果数组声明为String[],那么它将是一个固定大小的本机.NET数组。为了做你想做的事,你可以将两个数组声明为Array,或者让你的函数创建自己的本地JS数组,一旦你完成添加内容你就会变成String[]。 / p>

至于如何/为什么将Array走私到声明为String[]的变量中?我没有任何线索。但JS的类型系统介于“非常动态”和“我只是改变了Object的意思”之间。也许这正在发挥作用。