找回密码
 立即注册
查看: 4427|回复: 81

[脚本] Unity3D中可用的数组类型

[复制链接]
发表于 2015-2-10 18:18 | 显示全部楼层 |阅读模式
今天在蛮牛教育群里讨论了 关于unity数组方面的知识 下面给大家分享一下

  Javascript Array  (只有javascript可用)

  ArrayList

  Hashtable

  Generic List

  Generic Dictionary

  2D Array

  1. 内置数组build-in-Array:优点:最高效,唯一能在unity监视面板中看到的数组

  缺点:数组成员只能是同一种类型;数组长度不可变,但是可确定数组最大长度,用不到的留空,

  尽量用这种数组。

  e.g :

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

  myArray = new int[10];//新建一个数组并赋值

  2. Javascript Array

  优点:长度动态调整,成员类型可不同;

  缺点:略微消耗资源,只有javascript可用;

  e.g:

  var myArray = new Array();

  3. ArrayList

  非常类似于javascript Array,只不过C#中也可用

  e.g

  var myArrayList = new ArrayList();

  4.Hashtable

  4.1 哈希表就是键-值的一种映射结构。

  4.2 一般来说键是同一种类型,比如字符串,值都是同一种类型,比如GameObject;

  一般来说哈希表用在你想要快速访问你的对象时,就像通过名字或身份证号找到某人。和数组不同的是,你必须自己做好键值映射

  var h : Hashtable;

  h = new Hashtable();

  h.add(“1”,“one”);

  h.add(“2”,“tow”);

  Debug.Log(h.count);// output 2

  5.Generic List

  只有在C#中可以使用;非常类似于javascript Array、ArrayList,但是,它的成员只能是同一种类型。

  优点:节省资源,不易出错

  比较重要的是Generic List不能在iPhone中使用!

  c#中使用:必须声明using System.Collections.Generic; 命名空间

  List<type> myList = new List<type>();                 // declaration

  List<int> someNumbers = new List<int>();              // a real-world example of declaring a List of 'ints'

  List<gameobject> enemies = new List<gameobject>();    // a real-world example of declaring a List of 'GameObjects'

  6.Generic Dictionary

  generic Dictionary 对应 Hashtable, 就像 Generic List 对应ArrayList;是Hashtable的C#版本。

  一样只能在C#中使用,必须声明using System.Collections.Generic; 命名空间。不能在iPhone中使用

  7.2d Array

  最后是有关二维数组的创建和使用

  首先明确:只有c#可以创建二维数组,javascript不能创建,但是可以使用,这话怎么这么别扭?没关系,下面有解释

  7.1 c# 可以创建 “真”的( myArray[x,y])和“假”的( myArray[x][y])二维数组, 后者其实是一种嵌套结构,所以最好用前

一种。但有时2个维度不等长,就只能用假的

  c#创建二维数组举例:

  string[,] myArray = new string[16,4];

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

  7.2 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;

发表于 2015-9-6 14:21 | 显示全部楼层
貌似 List<T> 和 Dictionary<Key,Value> 都可以在 IPhone 中使用
发表于 2017-3-20 17:11 | 显示全部楼层
顶顶多好
发表于 2017-3-20 17:30 | 显示全部楼层
真心顶
发表于 2017-3-20 18:07 | 显示全部楼层
说的非常好
发表于 2017-3-20 17:24 | 显示全部楼层
很好哦
发表于 2017-3-20 18:03 | 显示全部楼层
不错不错
发表于 2017-5-8 08:52 | 显示全部楼层
很不错
发表于 2017-5-8 09:15 | 显示全部楼层
楼主是超人
发表于 2017-5-8 09:14 | 显示全部楼层
好帖就是要顶
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-23 20:59 , Processed in 0.274183 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表