Unity3D中可用的数组类型

2015年03月13日 13:30 0 点赞 1 评论 更新于 2025-11-21 13:41

今天我们来深入探讨Unity3D中可用的数组类型相关知识,并将这些内容分享给大家。

各类数组类型概述

在Unity3D里,有多种不同的数组类型可供使用,以下是这些数组类型的简要介绍:

  • Javascript Array:仅在Javascript中可用。
  • ArrayList
  • Hashtable
  • Generic List
  • Generic Dictionary
  • 2D Array

接下来,我们将详细介绍这些数组类型的特点、优缺点及使用示例。

具体数组类型介绍

1. 内置数组(build - in Array)

特点

  • 优点:效率最高,并且是唯一能在Unity监视面板中显示的数组。
  • 缺点:数组成员只能是同一种类型,数组长度不可变,但可以确定数组的最大长度,用不到的元素留空。鉴于其高效性,在合适的场景下应尽量使用这种数组。

使用示例

// 定义一个内置数组,可在面板中决定数组长度并赋值
var myArray: int [];
// 新建一个数组并赋值
myArray = new int[10];

2. Javascript Array

特点

  • 优点:数组长度可以动态调整,成员类型可以不同。
  • 缺点:会略微消耗资源,并且只有Javascript可以使用。

使用示例

var myArray = new Array();

3. ArrayList

ArrayList非常类似于Javascript Array,不过它在C#中也可以使用。

使用示例

var myArrayList = new ArrayList();

4. Hashtable

哈希表原理

哈希表是一种键 - 值的映射结构。一般来说,键是同一种类型(例如字符串),值也是同一种类型(例如GameObject)。哈希表通常用于需要快速访问对象的场景,就像通过名字或身份证号找到某人一样。与数组不同的是,使用哈希表时必须自己做好键值映射。

使用示例

var h : Hashtable;
h = new Hashtable();
h.add("1", "one");
h.add("2", "two");
Debug.Log(h.count); // 输出 2

5. Generic List

特点

  • 只能在C#中使用,与Javascript Array和ArrayList非常相似,但成员只能是同一种类型。
  • 优点是节省资源,且不易出错。需要注意的是,Generic List不能在iPhone中使用。

使用示例

在C#中使用Generic List时,必须声明using System.Collections.Generic;命名空间。

using System.Collections.Generic;
// 声明一个Generic List
List<type> myList = new List<type>();
// 声明一个包含整数的List
List<int> someNumbers = new List<int>();
// 声明一个包含GameObject的List
List<GameObject> enemies = new List<GameObject>();

6. Generic Dictionary

Generic Dictionary对应Hashtable,就像Generic List对应ArrayList一样,它是Hashtable的C#版本。同样,它只能在C#中使用,必须声明using System.Collections.Generic;命名空间,并且不能在iPhone中使用。

7. 2D Array

C#创建二维数组

只有C#可以创建二维数组,而Javascript不能创建但可以使用。C#可以创建“真”的二维数组(myArray[x,y])和“假”的二维数组(myArray[x][y]),后者实际上是一种嵌套结构,所以通常建议使用前者。但当两个维度长度不等时,就只能使用“假”的二维数组。

C#创建二维数组示例

string[,] myArray = new string[16,4];
Tile[,] map = new Tile[32,32]; // 制作小地图很有用

Javascript使用二维数组

由于Javascript不能创建二维数组,但可以使用,因此我们可以在C#中创建一个2dArray类,然后在Javascript中实例化。

示例代码

// 2dArray in c#
using UnityEngine;
public class MultiDim : MonoBehaviour
{
public static int[,] IntArray2D (int x, int y)
{
return new int[x,y];
}
}

将上述文件保存到default/script目录下,然后创建Javascript脚本:

var foo = MultiDim.IntArray2D(5, 8);
foo[3,2] = 5;

通过以上介绍,你应该对Unity3D中各种可用的数组类型有了更清晰的认识,可以根据具体的需求选择合适的数组类型。