我正在使用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脚本参考,无论我做什么似乎都没问题。任何帮助都会很棒。谢谢!
答案 0 :(得分:1)
看起来p1cube
不是常规的JS数组;不知何故,你有一个原生的.NET数组。那些不可调整大小,因此没有Push
方法(因为按定义“推”使数组更长)。
我现在正在解析文档,请原谅我的猜测。但似乎如果数组声明为String[]
,那么它将是一个固定大小的本机.NET数组。为了做你想做的事,你可以将两个数组声明为Array
,或者让你的函数创建自己的本地JS数组,一旦你完成添加内容你就会变成String[]
。 / p>
至于如何/为什么将Array
走私到声明为String[]
的变量中?我没有任何线索。但JS的类型系统介于“非常动态”和“我只是改变了Object
的意思”之间。也许这正在发挥作用。