Unity C#変数の宣言と型、ローカルとグローバル

IT

UnityというかC#で変数を宣言する方法、型の種類についてです。

スポンサーリンク

変数の型

Unityで使える変数の型としては、たとえば以下のようなものがあります。

型名 型の意味 扱える範囲
int 整数 -2,147,483,648~2,147,483,647
float 浮動小数点 -3.402823E+38~3.402823E+38
double 倍精度浮動小数点 -1.79769313486232E+308~1.79769313486232E+308
bool ブール値 trueまたはfalse
string 文字列 テキスト
GameObject ゲームオブジェクト ゲームオブジェクト名
Text、SpriteRenderer、Scriptなど オブジェクトのコンポーネント コンポーネント名

変数の宣言

unity 変数 宣言 private1
習うより慣れろで、まず変数を宣言して使ってみます。
どこで変数を宣言すべきかはどの程度使いまわすかによります(後述)。局所的にしか使わないならメソッド内で指定で問題ありません。
//Unity C#
void Start()
  {
  //整数型の変数nを作成
  int n;
  //nに1を代入
  n = 1;
  //nをコンソールに表示
  Debug.Log(n);
}
変数の宣言としては、型 変数名;という形式が最もシンプルです。
変数名 = 値;で変数に別の値を代入することができます。
//Unity C#
//整数型の変数nを作成+1を代入
int n = 1;
また、型 変数名 = 値;とすることで、変数の宣言と同時に初期値を代入することができます。
unity 変数 宣言 private2
スクリプトをオブジェクトにアタッチします(Startなのでどのオブジェクトでも可)。
unity 変数 宣言 private3
実行すると、作った変数nに代入した数値がコンソールに表示されます。
//Unity C#
  n = 2;
  //nをコンソールに表示
  Debug.Log(n);
}
変数の値を変えてやれば、
unity 変数 宣言 private4
出力される結果も変わります。

変数とはこのようにゲーム内で変動する値のことで、変数ごとに名前が付けられます。
変数には決まったフォーマット(データ型)以外の値を代入することはできません。たとえばデータ型がint(数値)の変数に、文字列を代入するとエラーになります。
数値管理やフラグ管理の他、長い構文を変数に代入することでコードをスリムにする役割も果たします。

変数の計算

//Unity C#
int n;
n = 1 + 2;
Debug.Log(n);
では、変数を使って計算をしてみたいと思います。
まず作った変数nに、1+2を代入する場合は、代入する値の部分に足し算をそのまま表記します。
unity 変数 計算1
コンソールには、結果である3が表示されます。
//Unity C#
int n = 1;
int m = 2;
n = m + 2;
Debug.Log(n);
数字だけでなく、変数を計算に使うこともできます。
unity 変数 計算2
結果は4です。さらに、
//Unity C#
int n = 1;
n = n + 1;
Debug.Log(n);
nとn+1を=でつなげることもできます。数学の式としてはおかしいですが、C#ではA = Bは「BをAに代入する」という意味なので、
unity 変数 計算3
ちゃんと動きます。結果は2となります。

演算子

//Unity C#
int n = 1;
//足し算
n = 1 + 2;
//引き算
n = 2 - 1;
//掛け算
n = 1 * 2;
//割り算
n = 2 / 1;

四則演算はそれぞれ+、-、*、/と表記します。
//Unity C#
int n = 1;
//足し算(n = n + 2と同じ意味)
n += 2;
//引き算(n = n - 1と同じ意味)
n -= 1;
//掛け算(n = n * 2と同じ意味)
n *= 2;
//割り算(n = n / 2と同じ意味)
n /= 2;
変数の値を変更する場合は、演算子に=を付ける形で表記することもできます。
//Unity C#
int n = 1;
//足し算(n + 1)
n ++;
//引き算(n - 1)
n --;
また、変数の数字を1だけ増やす場合は変数の後に+をふたつ(インクリメント演算子)、1だけ減らす場合は-をふたつ(デクリメント演算子)置く書き方もできます。

文字列変数

//Unity C#
string n = "Hello";
stringは文字列を代入できる変数の型です。数値とちがい、文字列を代入する時は""で閉じる必要があります。
//Unity C#
    void Start()
    {
        string n = "Hello";
        Debug.Log(n + ",World");
    }
文字列どうしを繋げる場合も+を使います。たとえばHelloを代入したnのあとに",World"という文字列を繋げて出力すれば、
unity hello world
繋がった文字列として表示されます。

ローカル変数とグローバル変数

ローカル変数とグローバル変数のちがい、同時に存在した場合などについて解説します。

ローカル変数

public private unity1
押すと変数が表示されるボタンがあるものとします(作り方)。
//Unity C#
using UnityEngine.UI;

public class textChanger : MonoBehaviour
{
public void ButtonClick()
{
//ローカル変数
string n = "1";
GameObject text = GameObject.Find("Text");
text.GetComponent<Text>().text = n;
}
}
コード的には「1」をString(文字列)型として扱い、そのままテキストに表示するというものです。
このように、メソッド内で作った変数ローカル変数と呼ばれます。
ローカル変数は、作成したメソッド内でのみ使うことができます。
public private unity2
ゲームを実行して、ボタンを押すと数字が変わります。
//Unity C#
void Start()
{
//ローカル変数
string n = "1";
}

public void ButtonClick()
{
GameObject text = GameObject.Find("Text");
//nを見付けられないのでエラーになる
text.GetComponent<Text>().text = n;
}
こういうコードはローカル変数を別のメソッドから参照しようとしてるので、エラーになります。
ただし、別々のメソッド内で同じ名前のローカル変数を作ることはできます。その場合名前は同じでも、全くちがう別々の変数として扱われます。

グローバル変数

//Unity C#
public class textChanger : MonoBehaviour
{
//グローバル変数
string n = "1";
このようにクラス名の後、メソッドが始まる前に宣言された変数はグローバル変数と呼ばれます。
グローバル変数は、同じクラス内のどのメソッドからでも参照することができます。

ローカル変数とグローバル変数が混在

//Unity C#
public class textChanger : MonoBehaviour
{
//グローバル変数
string n = "1";

public void ButtonClick()
{
//ローカル変数
string n = "2";
GameObject text = GameObject.Find("Text");
text.GetComponent<Text>().text = n;
}
ローカル変数とグローバル変数で同じ名前の変数がある場合、
public private unity3
ローカル変数のほうが優先度が高いです。変数の名前には注意しないと、気付かないうちに別の変数を操作する可能性があります。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント