Boo列表 - 转换为(int)?

时间:2014-10-10 15:43:53

标签: list unity3d mono boo

我试图遵循最初为UnityScript编写的本教程,但改为使用Boo: http://docs.unity3d.com/Manual/Example-CreatingaBillboardPlane.html

这是我尝试的内容:

import UnityEngine

class CreateMesh (MonoBehaviour): 

    def Start ():
        meshFilter = GetComponent(MeshFilter)
        mesh = Mesh()
        mesh.vertices = [Vector3(0, 0, 0), Vector3(1, 0, 0), Vector3(0, 1, 0), Vector3(1, 1, 0)]
        mesh.triangles = [0, 2, 1, 2, 3, 1]
        mesh.normals = [-Vector3.forward, -Vector3.forward, -Vector3.forward, -Vector3.forward]
        meshFilter.mesh = mesh

    def Update ():
        pass

不幸的是,我的每个列表文字都引起了问题:

  

无法转换' Boo.Lang.List'到'(UnityEngine.Vector3)'

     

无法转换' Boo.Lang.List'到'(int)'

     

无法转换' Boo.Lang.List'到'(UnityEngine.Vector3)'

这有点令人失望 - 我原本以为Boo能够推断出我的列表类型,因为其中的所有元素属于同一类型。无论如何,我认为所有必要的都是某种演员陈述。我在Unity上看了几个其他的Boo示例,但是他们似乎都没有像我想的那样使用列表。

我仔细研究了一下,看到我可以投射到这样的类型列表:

[...] as List[of type]

所以我尝试了这样:

mesh.triangles = [0, 2, 1, 2, 3, 1] as List[of int]

但这仍然无效 - 它只是将我的错误消息更改为:

  

无法转换' Boo.Lang.List [of int]'到'(int)'。

我不知道(int)是什么意思 - 我原以为List仅由int组成,但似乎我一定是错的。

1 个答案:

答案 0 :(得分:2)

关键点:Mesh类需要数组,而不是列表。这两种类型非常相似,但不完全相同。

Type                 C#           Boo
-----------------------------------------------
List of integers     List<int>    List[of int]
Array of integers    int[]        (int)
Dictionary           ???          Dictionary[of key, value]

此行创建一个int列表:

mesh.triangles = [0, 2, 1, 2, 3, 1]

与一系列整数:

mesh.triangles = (0, 2, 1, 2, 3, 1)

请注意,我们会为[] parens交换()个大括号。