icon
icon

動的配列を覚える!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を使用する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

目次

1時間でできる無料体験!

そもそも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」でテキストを新規作成し、それに以下のスクリプトを追加してみよう。

 

[PR] Unityを使ったゲーム開発で挫折しない学習方法を動画で公開中

実際にListを使用してみる

今回はListを使用して、カウントダウンを作ってみましょう。

 

画面の作成

中央にテキストを配置して、以下のような画面を作成してください。

unity_07_01

サンプルコード

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++;
    }
    }
}

実行結果

unity_07_02

解説

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加算しています。

 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

まとめ

今回は、UnityでListを使う方法について解説してみました。

配列は、要素の数が固定でした。

Listは、要素の数が固定されていませんでした。

Listは配列の長さが決まっていないので、より多様な場面で使用できます。

ゲーム制作の現場では、メモリをいかに減らすか考える際に、Listのような動的なコードが必要になります。

ゲームが作れる!入門に最適なUnityの学習サイト20選 も参考にしてみてくださいね。

 

田島悠介

Listを使った例を実践してみたよ。

大石ゆかり

カウントダウンはゲーム中でも何かと使えそうですね。

田島悠介

Unityではこのようにスクリプトを活用することで、テキストのオブジェクトにもいろいろな役割を持たせることができるんだ。少しずつレパートリーを増やしてみよう。

大石ゆかり

分かりました。頑張ってみます!

 

Unityを学習中の方へ

これで解説は終了です、お疲れさまでした。

  • つまずかず「効率的に」学びたい
  • 副業や転職後の「現場で使える」知識やスキルを身につけたい

Unityを学習していて、このように思ったことはありませんか?

テックアカデミーでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。

合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、はじめてでもUnityでオリジナルゲームの制作ができるようになります。

まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。

時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する