動的配列を覚える!UnityでListを使う方法【初心者向け】
初心者向けにUnityで配列に似たListを使う方法について解説しています。実際にソースコードを書きながら説明しているのですぐ分かるでしょう。ゲーム開発をする上で役に立つ知識になるので、ぜひご覧ください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
ほとんどのプログラミング言語には配列という、同じデータ型の変数をまとめる機能が備わっています。
Unityで使用されているC#では、その配列のほかにListという配列に似た機能が備わっています。
UnityでListを使うことで、要素の数を不特定な状態で利用することが可能です。
実務でも、UnityでListを使うことで、要素数を限定しない実装が可能になりますので、ぜひ学習してみてください。
今回はそのListを使用する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
目次
そもそもUnityについてよく分からないという方は、Unityとは何なのかについて解説した記事を読むとさらに理解が深まります。
今回はC#のList型について勉強しよう。
田島メンター!!List型とは何ですか~?
役割としては配列と同じなんだけれど、これは動的に要素の数を増減できる便利なものなんだ。簡単な例で実際に確認してみよう。
はい!
Listとは
Listは配列ととてもよく似たものです。
違いは、配列の長さが動的か静的かだけです。
動的というのは、値が固定されていないということを意味します。
静的というのは、値が固定しているという意味です。
メリット
配列を宣言するときは、初めから配列の個数は決められています。
しかし、Listの場合は長さを決めずに宣言できます。
つまり、Listにはその時によって要素数を増減させるメリットがあります。
デメリット
注意点として、Listは配列に比べ処理負荷が必要です。
配列は、最初の段階で個数が決まっているため、初期段階で領域の確保が終了しています。
Listは要素の追加をするたびに、領域計算を行うため、処理負荷がかかってきます。
つまり、配列で良い処理にもすべてListを使い続け、様子の追加をする必要がない処理に追加することで、パフォーマンスが低下するデメリットがあります。
FPS値を見ながら、配列とListをうまく使い分けると良いでしょう。
Listの書き方
それではListの書き方を解説していきたいと思います。
配列の書き方
次のコードでは、静的な要素を10個指定して配列を作成しています。
int[] intArray = new int[10];
Listの書き方
ここでは基本的なListの書き方を解説します。
サンプルコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class list : MonoBehaviour
{
void Start()
{
List<int> myList = new List<int>();
myList.Add(10);
Debug.Log(string.Join(", ",myList));
int number = myList[0];
Debug.Log(number);
myList.Insert(0, 20);
Debug.Log(string.Join(", ",myList));
myList.RemoveAt(0);
Debug.Log(string.Join(", ",myList));
myList.Clear();
Debug.Log(string.Join(", ",myList));
}
}
実行結果
解説
using System.Collections;では、System.Collectionsを利用できるようにしています。
using System.Collections.Generic;では、System.Collections.Genericを利用できるようにしています。
using UnityEngine;では、UnityEngineを利用できるようにしています。
public class list : MonoBehaviourでは、listクラスを宣言しています。
{では、public class list : MonoBehaviourの処理を開始しています。
void Start()で、プログラム実行時、動作させる処理を開始しています。
{では、void Start()の処理を開始しています。
List<int> myList = new List<int>();では、Listの宣言しています。
intの部分を変更して宣言すれば、String型はもちろん、GameObjectなどのUnity独特の型でも宣言できます。
myList.Add(10);では、数値の10をmyListの末尾に加えています。
Debug.Log(string.Join(“, “,myList));では、myListを表示しています。
表示結果は10です。
int number = myList[0];では、Listの要素を変数に代入し、配列と同じように使用できるようにしています。
Debug.Log(number);では、numberを表示しています。
表示結果は10です。
myList.Insert(0, 20);では、インデックスの0番目に20を挿入しています。
Debug.Log(string.Join(“, “,myList));では、myListを表示しています。
表示結果は20,10です。
myList.RemoveAt(0);では、Listの0番目の要素を消す処理をしています。
Debug.Log(string.Join(“, “,myList));では、myListを表示しています。
表示結果は10です。
myList.Clear();では、Listすべての要素を削除しています。
Debug.Log(string.Join(“, “,myList));では、myListを表示しています。
表示結果はありません。
}では、void Start()の処理を終了しています。
}では、public class list : MonoBehaviourの処理を終了しています。
実際に画面でどのように処理されるか見てみようか。
どんな形で確認したらいいですか~?
「GameObject」→「UI」→「Text」でテキストを新規作成し、それに以下のスクリプトを追加してみよう。
実際にListを使用してみる
今回はListを使用して、カウントダウンを作ってみましょう。
画面の作成
中央にテキストを配置して、以下のような画面を作成してください。
サンプルコード
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class countDown : MonoBehaviour {
private List<int> myList = new List<int>(); //Listの宣言
private float timeleft; //時間測定のための変数
private int count; //カウント変数
void Start () {
for (int i = 0; i < 10; i++)
{
myList.Add(i); //Listに値を格納
}
}
void Update () {
timeleft -= Time.deltaTime;
if (timeleft <= 0.0) {
timeleft = 1.0f;
this.GetComponent<Text>().text = myList[9 - count].ToString(); //テキストの変更
count++;
}
}
}
実行結果
解説
using UnityEngine;では、UnityEngineを使用する準備をしています。
using System.Collections;では、System.Collectionsを使用する準備をしています。
using System.Collections.Generic;では、System.Collections.Genericを使用する準備をしています。
using UnityEngine.UI;では、UnityEngine.UIを使用する準備をしています。
public class countDown : MonoBehaviour {では、countDownというクラスを宣言しています。
private List<int> myList = new List<int>(); では、Listの宣言をしています。
private float timeleft; では、時間測定のための変数を宣言しています。
private int count; では、カウント変数を宣言しています。
void Start () {では、Start 関数を宣言しています。
for (int i = 0; i < 10; i++)では、処理を10回行う繰り返し処理をしています。
myList.Add(i); では、Listに変数iに格納された数値を代入しています。
void Update () {では、Update 関数を宣言しています。
this.GetComponent<Text>().text = myList[9 – count].ToString(); では、テキストの変更を行っています。
count++;では、カウント変数に1加算しています。
まとめ
今回は、UnityでListを使う方法について解説してみました。
配列は、要素の数が固定でした。
Listは、要素の数が固定されていませんでした。
Listは配列の長さが決まっていないので、より多様な場面で使用できます。
ゲーム制作の現場では、メモリをいかに減らすか考える際に、Listのような動的なコードが必要になります。
ゲームが作れる!入門に最適なUnityの学習サイト20選 も参考にしてみてくださいね。
Listを使った例を実践してみたよ。
カウントダウンはゲーム中でも何かと使えそうですね。
Unityではこのようにスクリプトを活用することで、テキストのオブジェクトにもいろいろな役割を持たせることができるんだ。少しずつレパートリーを増やしてみよう。
分かりました。頑張ってみます!
Unityを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
Unityを学習していて、このように思ったことはありませんか?
テックアカデミーでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、はじめてでもUnityでオリジナルゲームの制作ができるようになります。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!