最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
Unity3D中可用的数组类型
今天我们来深入探讨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中各种可用的数组类型有了更清晰的认识,可以根据具体的需求选择合适的数组类型。