2012年12月7日金曜日

Unity初心者が学ぶ増減するリスト情報の管理


前回に引き続きListやDictionariesで増減するオブジェクトコレクションの使い方についてUnity Gemsの内容をみていく:

---------

http://unitygems.com/mistakes1/
October 15, 2012

増減するリスト情報の管理

Array、ArrayList、HashTableを用いないこと。.NETのジェネリックコレクションか組み込みされた配列を使用すべきである。古いコレクションでは多くのコードを記述しないと必要なオブジェクト型を得ることが出来ない一方で、ジェネリックコレクションはその問題を解決し、さらに必要であれば異なったオブジェクト型にも対応することも可能である

組み込みされた配列、たとえばint[1000]は高速で効率的に使用できるコレクションであるが、ランタイムで増減させることはできない。配列が増減しないケースに限って使用すること。

C#では

using System.Collections.Generic;

をファイル冒頭に追記しないとジェネリックコレクションが使用できない。Javascriptではその必要性がない。

ArrayやArrayListの代わりにジェネリックリストを使用すること。リストはランタイムにアイテムが追加、削除することが可能であり、特定の型(あるいはその型のサブクラス)を保有しているため、ソートも容易であり必要時に配列に変更することが出来る。

ListおよびDictionaryについてはMSDNの.NETドキュメントを参考にすることが出来る。UnityScriptあるいはC#での簡単な事例は以下で紹介するので、基本的な考え方は身につけることが出来る。

Listの使用例


//Javascriptを使用してリストの定義
var myList = new List.<int>();
var anotherList = new List.<SomeClass>();

//C#を使用してリストの定義
List<int> myList = new List<int>();
List<SomeClass> anotherList = new List<SomeClass>();

//リストに要素を追加
myList.Add(someValue);

//リストに複数要素を追加
myList.AddRange(someListOrArrayOfValues);

//全ての要素をクリア
myList.Clear();

//リストに挿入
myList.Insert(1, someValue);

//複数の要素を挿入
myList.InsertRange(1, someListOrArrayOfValues);

//特定の値を取り除く
myList.Remove(someValue);

//特定インデックスの要素を取り除く
myList.RemoveAt(1);

//要素のインデックスを取得する
var index = myList.IndexOf(someValue);

//Javascriptで関数を使って何かのインデックスを取得する
var index = anotherList.FindIndex(function(entry) entry.someValue == something);

//リストを配列にする
var myArray = myList.ToArray();

//C#で関数を使って何かのインデックスを取得する
var index = anotherList.FindIndex((entry) => entry.someValue == something)

//アイテム数を取得する
var itemCount = myList.Count

Dictionaryは.NETのジェネリック連想配列であり、以下の使用例がある


//JavascriptでStringからintとして定義する
var myDic = new Dictionary.<String, int>();

//JavascriptでGameObjectからクラスのDictionaryとして定義する
var anotherDic = new Dictionary.<GameObject, SomeClass>();

//C#でStringからintとして定義する
Dictionary<string, int> myDic = new Dictionary<string, int>();

//C#でGameObjectからクラスのDictionaryとして定義する
Dictionary<GameObject, SomeClass> anotherDic = new Dictionary<GameObject, SomeClass>();

//Dictionaryに要素を追加
myDic["Something"] = someIntValue;

//Dictionaryから値を取得
var someValue = myDic["Something"];

//複雑な値を取得しプロパティをひとつ変更する
anotherDic[gameObject].someProperty = someValue;

//値が存在するかチェックheck if a value exists
if(myDic.ContainsKey("Something")) { }

//Dictionaryから要素を削除
myDic.Remove("Something');

//JavascriptでDictionaryの全てのキーをループする
for(var key : String in myDic.Keys) { }

//C#でDictionaryの全てのキーをループする
foreach(int value in myDic.Values) { }

//全ての要素をクリア
myDic.Clear();

//Dictionaryのアイテム数を取得
var count = myDic.Count;
----

リスト情報の管理はUnity独自の内容ではなく、なじみのない人は苦手分野かもしれない。

幅広く勉強をしてゲーム開発に活用しようぜ!

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿

ブログ アーカイブ