スクラッチからUnityへ変換「変数・リスト偏」のイメージ画像

スクラッチの次は?Unityへシフトアップ!スクラッチブロック→Unity変換表「変数・リスト偏」 - ファイブボックス

スクラッチの次は?Unityへシフトアップ!スクラッチブロック→Unity変換表「変数・リスト偏」

スクラッチ Unity変換表「変数」

スクラッチの変数は、ゲーム中に置き換わる値(スコア、HPなど)を入れる入れ物として使われます。Unityでも同様に、いろいろなデータを入れる入れ物として使われますが、データの型を事前に宣言するなど、若干の違いがあります。


スクラッチブロック 変数

変数

Unityでもスクラッチ同様、変数を使用することが出来ます。変数を使うには事前に変数を宣言する必要があります。

  • データ型

スクラッチとの違いは、宣言時に「データ型」というどのような情報をその変数に入れるのか、ということも併せて記述する必要があります。

  • 主に使用される変数のデータ型
サイズ(バイト)意味初期値
bool1真偽型false
char11文字​\0 (null文字)
int4整数(約±21億迄の整数)0
long8実数(約±900京までの整数)0
float4単精度浮動小数点(約7桁の値)0
double8倍精度浮動者小数点型(約15桁の値)0
string文字列“”(空文字)
  • アクセス修飾子

Unityでは作成した変数を自分のクラスでのみ使用するのか?他のクラスでも使用できるのか?という「アクセス修飾子」を指定します。アクセス修飾子は省略可能で、省略した場合は「private」となり、そのクラスのみでしか使用できなくなります。アクセス修飾子には下のように5つのタイプがありますが、通常、public と private を意識すれば大丈夫でしょう。

アクセス修飾子概要
public全てのクラスからアクセス可
protected internal同じアセンブリ内のクラスとそのサブクラスに対してアクセス可
protected同じクラス内とサブクラス内からのアクセスを可
internal同じアセンブリ内からのみアクセス可
private同じクラスからのみアクセス可

※通常はUnityプロジェクト内のすべてのスクリプトが同じアセンブリに含まれます

  • 命名規則

変数には次のような命名規則があります。

  1. 1文字目はアルファベット、またはアンダースコア
  2. 2文字目以降は1文字目で使える文字、または数字
  3. 変数名に含まれるアルファベットの大文字/小文字は区別される
  4. 予約語ではない(型名やfor、while、null、bleakなど他に使用されるもの以外)
  • 変数の使用例
bool isRun;     //真偽型の変数 isRun を宣言 
int num;        //整数型の変数 num を宣言
float posX;     //浮動小数点型の変数 posX を宣言
string s        //文字列型の変数 s を宣言

スクラッチブロック 変数を〇にする

変数を〇にする

変数の値を変更することを「代入する」と言います。

左辺に変数を配置し、=(イコール)の記号で任意の値を代入します。

  • 使用例
isRun = true;                   //isRun を true にする 
num = 100;                      //num に100を代入する 
posX = transoform.position.x;   //PosX にx座標を代入する 
s = "合計は" + num;             //s に 合計は100 と代入する

スクラッチブロック 変数を〇ずつ変える

変数を〇ずつ変える

変数を変える場合、現在の値に特定の値を加算していく、などの加算代入演算子や減算代入演算子が用いられるケースがよく見られます。 先に説明した「変数を〇にする」と区別せずに使われるケースがほとんどです。

  • 使用例
num += 2;                       //num を 2 ずつ変える 
posX -= transoform.position.x;  //posX を x座標ずつ減らす

スクラッチブロック 変数を表示する
スクラッチブロック 変数を隠す

変数表示する/隠す

Unityではもともとスクラッチの様に、ステージ上に変数を表示するという機能がありません。変数を表示したい場合は、UIを使用すると良いでしょう。

事前に下のように変数を表示するためのUI、Textを配置します。

Unity テキストの準備
  • 変数の宣言と初期値の取得
GameObject variableText;   //GameObject型の変数 variableText を宣言

void Start() 
{
    variableText = GameObject.Find("Canvas/Text"); //variableTextにCanvas配下のTextを探して代入
}
  • 変数を隠す
variableText.SetActive(false);
  • 変数を表示する
variableText.SetActive(true);

スクラッチ Unity変換表「リスト」

スクラッチのリスト同様、一つのリストに複数のデータを入れることが出来ます。さらにスクラッチ同様、ゲーム中に入れたり外したり自由にその中身データやデータ数を置き換えることが出来ます。

ここではそんなリストについてご紹介いたします。


スクラッチブロック リスト

リスト

Unityのリストはスクラッチと同様、動的で自由に要素を追加したり削除することが出来ます。

リストを使用するには、変数と同様、事前にデータ型、アクセス修飾子と共にリストを宣言します。変数と違い「List<型名 リスト名>」 で宣言、「new List<型名>()」で初期化してから使用します。

  • 使用例
List<int> mylist = new List<int>();      //整数型のリスト mylist を宣言、初期化
 List<float> score = new List<float>();  //浮動小数型のリスト score を宣言、初期化
List<string> menu = new List<string>();  //文字列型のリスト menu を宣言、初期化

宣言時にリストに要素を追加するときは、{ } で要素全体を囲み個々の要素の間を「,(カンマ)」で区切ります。

  • 使用例
List<int> mylist = new List<int>{ 10, 20, 30 };                    //mylist にデータを入れて初期化
List<float> score = new List<float>{ 1.1f, 2.5f, 4.3f, 6.9f };     //score にデータを入れて初期化
List<string> menu = new List<string>{ "ライス", "パン", "パスタ"};  //menu にデータを入れて初期化

スクラッチブロック なにかをリストに追加する

「なにか」をリストに追加する

リストに要素を追加するときは Add() メソッド を使用します。Add()メソッドでは末尾に要素が追加されます。

  • 使用例
mylist.Add(40);      //mylist に40を追加 
score.Add(5.7f);     //score に5.7fを追加 
menu.Add("うどん");  //menu に"うどん"を追加

スクラッチブロック リストの1番目を削除する

リストの○番目を削除する

リストの n 番目の要素を削除するには、RemoveAt(n) メソッドを使用します。なお要素は0番目から開始するので、最初のデータを削除するには RemoveAt(0) となります。

  • 使用例
mylist.RemoveAt(2);   //mylist から 3番目の要素を削除 
score.RemoveAt(1);    //score から 2番目の要素を削除 
menu.RemoveAt(0);     //menu の最初の要素を削除

また、RemoveRange()メソッドを使うと、指定した場所から指定した数だけ要素を削除することが出来ます。RemoveRange(index , count) と指定した時、index番目からcount個の要素が削除されます。

  • 使用例
mylist.RemoveRange(2,2);   //mylist の3番目から4番目までの要素を削除 
score.RemoveRange(1,1);    //score の2番目の要素、1つのみを削除 
menu.RemoveRange(0, 3);    //menu の最初から3つの要素を削除

スクラッチブロック リストの全てを削除する

リストのすべてを削除する

リストの すべてを削除するには Clear() メソッドを使用します。

  • 使用例
mylist.Clear();    //mylist の全てを削除 
score.Clear();     //score の全てを削除 
menu.Clear();      //menu の全てを削除

スクラッチブロック リストのn番目に何かを挿入する

リストの○番目に何かを挿入する

番号を指定してリストに要素を挿入するには、Insert()メソッドを使用します。

Insert( index , item) と指定したとき、 index 番目に item という要素が挿入されます。

  • 使用例
mylist.Insert(1,15);      //mylist の2番目に 15 を挿入 
score.Insert(0,0.5f);     //score の1番目に 0.5f を挿入 
menu.Insert(3,"そば");    //mylist の4番目に "そば" を挿入

スクラッチブロック リストの○番目を何かで置き換える

リストの○番目を何かで置き換える

リストの要素を置き換えるには、そのリストにアクセスし、新たな値で置き換えます。

  • 使用例
mylist[1] = 18;       //mylist の2番を 18 で置換 
score[3] = 2.9f;      //score の4番を 2.9f で置換 
menu[0] = "ごはん";   //menu の1番を "ごはん" で置換

スクラッチブロック リストのn番目

リストの○番目

リストの n 番目を指定するには リスト名[0] の様に[ ]で囲ってindex番号を指定します。index番号は 0 番目から始まるので注意しましょう。

  • 使用例
mylist[1]   //mylist の2番 
score[3]    //score の4番 
menu[0]     //menu の1番

スクラッチブロック リストの中の何かの場所

リストの中の「なにか」の場所

リストの中の特定の要素の場所を探すには、IndexOf()メソッドを使用します。検索する要素が対象リストの一番前にあれば、0 を返します。もし指定した要素が無い場合は、-1 を返します。

  • 使用例
Debug.Log(mylist.IndexOf(30));      //mylist の中の30のある場所を表示 
Debug.Log(score.IndexOf(0.0f));     //score の中の 0.0f がある場所を表示 
Debug.Log(menu.IndexOf("パスタ"));   //menu の中の"パスタ"のある場所を表示

※2番目のscore の中には 0.0f が無いので、-1 と表示されます

indexOfメソッドは、第二引数に検索開始位置、第三引数に検索する要素数を指定し、細かい検索を行うことが出来ます。

また、LastIndexOf()メソッド を使用して、指定した要素の位置を後方から検索することもできます。このメソッドも第二引数に検索開始位置、第三引数に検索する要素数を指定し、細かい検索を行うことが出来ます。

  • 使用例
Debug.Log(mylist.LastIndexOf(30));          //mylist の要素を後方から検索 
Debug.Log(score.IndexOf(1.1f,3,2));         //score の要素を後方4番目から2つ検索 
Debug.Log(menu.IndexOf("パスタ", 0, 4));    //nemu の要素を後方0番目から4つ検索

スクラッチブロック リストの長さ

リストの長さ

スクラッチの「リストの長さ」はリストの要素数を表します。UnityではCountプロパティを使って要素数を取得することが出来ます。

  • 使用例
Debug.Log(mylist.Count);    //mylist の要素数を表示
Debug.Log(score.Count);     //score の要素数を表示 
Debug.Log(menu.Count);      //menu の要素数を表示

スクラッチブロック リストに何かが含まれる

リストに「なにか」が含まれる

リストに特定の要素が含まれるかどうかを調べるには Conteins()メソッド を使用します。

もし含まれていたら true を、含まれていなければ false を返します。

  • 使用例
if (menu.Contains("パスタ")) //もし menu に「パスタ」が含まれていたら 
{
    Debug.Log("はい、ございます"); //「はい、ございます」と表示 
} else //なければ { 
    Debug.Log("少々お待ちください"); //「少々お待ちください」と表示 
    menu.Add("パスタ"); //menu に「パスタ」を追加 
}

スクラッチブロック リストを表示

リストを表示する

変数と同様に、Unityではリストを表示する、非表示するという機能はありません。

スクラッチではリストを表示したときに、ステージ上にリスト内の要素が表示されますので、今回はその機能をご紹介します。

foreach()文を使うことで、リスト内の全ての要素を表示することが出来ます。

  • 使用例
foreach (int i in mylist)  //mylist の要素数の数だけ繰り返す 
{ 
    Debug.Log(i);           //i番目の要素を表示 
} 
foreach (float j in score)  //score の要素数の数だけ繰り返す 
{ 
    Debug.Log(j);           //j番目の要素を表示 
} 
foreach (string k in menu)  //menu の要素数の数だけ繰り返す 
{
    Debug.Log(k);           //k番目の要素を表示 
}
Unity リスト表示完成イメージ

リストをステージ上に表示するにはUI のテキストを使用します。スクロールビューを活用すると、リストが多くなった時にリストが多くなった時にスクロールで送ることが出来ます。

今回は左の図の様にリストを表示してみたいと思います。

まずは下の図の様に、Canvasの配下に ScrollView を配置してください。ScrollViewの配下には各種パーツが配置されています。

Unity ScrollViewの準備

ScrollView の配下の VewPort、さらにその配下の Content 、この配下にテキストを置くことで、ScrollView に文字が表示されます。

  1. Content の設定 ・AnchorPreset をTop Left に指定し、Width:200、Height:300 程度に指定
    GridLayoutGroupコンポーネントを追加(子要素を均等に並べるコンポーネント)  
    → CellSizeを x:200、y:25 程度に指定(要素の幅と高さ)
  2. ListText の配置 Content の配下に UI の Text を新たに配置、「ListText」などの名前を指定 「ListText」をAssetフォルダにドラッグ&ドロップでプレハブ化   
    Content配下のオブジェクトは削除しておきましょう。
Unity リスト表示の準備
  • 変数の宣言
GameObject content;             //SclrollView の Content オブジェクト 
public GameObject textPrefab;   //上で作ったListTextのプレハブ

作成中のスクリプトファイルは UI の ScrollView にアタッチします。

上で宣言した変数:textPrefab には先に作成済みの ListText のプレハブをAssign

Unity リスト表示プログラムのアタッチとAssign
  • リストの作成(未作成の場合は作っておきます)
List<string> menu = new List<string> { "ライス", "パン", "パスタ", "そば", "うどん" };
  • 変数の初期値取得とリストの表示
void Start() 
{
    content = transform.Find("Viewport/Content").gameObject;   //変数content を探して代入 
    content.GetComponent<RectTransform>().sizeDelta = new Vector2(180f, menu.Count * 25); //content の大きさを指定 
    foreach (string i in menu)                                  //リストの要素数だけ繰り返す 
    {
        GameObject menuText = Instantiate(textPrefab);         //textPrefabを生成し、menuText の名前で変数化 
        menuText.transform.SetParent(content.transform,false); //nemuText を content の子要素に
        menuText.GetComponent<Text>().text = i;          //menuText の文字にリストのi番目を代入 
    } 
}
  • 作成したリストを表示する
content.SetActive(true); //リストを表示する

スクラッチブロック リストを隠す

リストを隠す

上で作成したリストを隠す方法です。

  • 作成したリストを隠す
content.SetActive(false); //リストを隠す

スクラッチ Unity変換表「配列」

スクラッチにはないのですが、リストと似ている機能として、Unityには「配列」というものがあります。

配列はリストと違って次のような特徴があります。

  • 1つの配列に複数のデータを格納できるが、静的で内部の要素数は一度決めたら固定
  • 1つの要素にさらに要素を加える(多次元構造)が可能

配列の宣言

配列は使用する前に型、要素数、配列名を指定します。使用する要素を直接代入することで、要素数の宣言を省略することも可能です。

  • 配列の宣言
string[] name = new string[3];                        //配列の宣言、初期値 ""が登録 
float[] temp = { 1.4f, 1.9f, 2.8f, 3.2f };            //要素数4の配列に値を代入 
int[,] data = new int[,]{ {11,2 }, {12,3}, {13,4} };  //3×2 の配列

配列へのアクセス

配列にアクセスするには[]内にindex数を指定してアクセスします。

  • 配列へのアクセス
name[0] = "taro";       //name の1番目に "taro" を代入 
Debug.Log(temp[2]);     //temp の3番目 2.8 と表示 
data[2, 1] = 7;         //[2,1]の要素4という値を7に置換

配列の要素数

配列の要素数は Length プロパティで取得します

  • 配列の要素数
Debug.Log(name.Length);   //nameの要素数、3と表示される 
Debug.Log(temp.Length);   //tempの要素数、4と表示される 
Debug.Log(data.Length);   //多次元配列の場合、全ての要素数 6 と表示

ファイブボックスでは、スクラッチはもう卒業、という方向けにUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP