Unityのメソッドの作り方・呼び出し方・引数・返り値
Unityのメソッドはデータに対しどんな処理を行うかを示すプログラムでクラスの中身を構成する要素だ。C#でのスクリプトの開き方や基本的な構文の作り方がわからない場合は先に以下の記事を確認するのをおすすめする。UnityのC#の書き方
UnityのC#の変数
また、Unityの基礎知識や操作などがわからない場合は先に以下の記事を確認してほしい。
Unityの基礎まとめ
この記事ではメソッドの作り方、呼び出し方、引数、返り値などを紹介していく。
UnityのC#のメソッド目次
メソッドの作り方メソッドの呼び出し
引数とは
返り値(戻り値)とは
目次にもどる
メソッドの作り方
メソッドのうちStartとUpdateはスクリプトに最初から記述されている。だが、それ以外のメソッドを一から記述することも可能だ。
メソッドは返り値 名前(引数)のように書く(名前は変数と同様にunityがつけている名前や同じ名前以外なら何でもつけてOK。わかりやすい名前をつけよう。返り値はひとまず考えず、値を返さないvoidを使用する。引数についてもひとまず入力せずに説明する)。
例文は以下の通り。
.jpg)
void methodrei ()
{
string x = "テスト";
Debug.Log(x);
}
methodreiがメソッドの名前である。クラス内にこのメソッドを書いて、スクリプトを保存し、ゲームオブジェクトにアタッチしてみよう。
そして再生すると、まさかの何のログも出ない・・・。methodreiのメソッドの処理が行われていない。
StartとUpdateは特殊でありUnityから呼び出されていた。一から書いたメソッドで処理を行うにはメソッドの呼び出しを行う必要がある。
目次にもどる
メソッドの呼び出し
メソッドの呼び出し方を紹介する。Startメソッド内に以下の記述を加えよう。
methodrei();
クラス内に書いたメソッドはさっきのままでいい。
void methodrei()
{
string x = "テスト";
Debug.Log(x);
}
これで再生すると、Unityに呼び出されたStartのmethodrei();の記述によりmethodreiメソッドが呼びだされて処理が行われ、ログ「テスト」が表示されるようになる。
メソッドで一つの機能を作っておけば、様々なところから呼び出すことができ、とても便利だ。
例えばゲーム制作で宝箱を作成したとしよう。宝箱の開く時の演出や効果音など共通で使う処理を一つのメソッドにまとめておけば、色々なところに同じ処理を書く必要がなくなる。更に演出や効果音を変えたくなった場合でもメソッド1か所を変更すればいいのでとても楽だ。
目次にもどる
引数とは
メソッドは返り値 名前(引数)のように書く。この中で引数はメソッドに送るデータを示す。
メソッド側に引数を記述するだけでなく、メソッドを呼び出す側にもデータを送る記述が必要である。例は以下の通り。
.jpg)
Start内に書いた記述
methodrei(98);
クラス内に書いたメソッド
void methodrei(int y)
{
string x = "テスト";
Debug.Log(x);
Debug.Log(y);
Debug.Log("点");
}
これで再生すると、StartメソッドがUnityにより呼び出され、そこからmethodreiメソッドが呼び出される。その際に引数98が変数Yに代入される(変数Yはmethodreiメソッド内でのみ使用可能)。ログは「テスト」、「98]、「点」となる。
なお、引数は以下のように複数指定も可能となっている。
.jpg)
Start内に書いた記述
methodrei(98,64,85);
クラス内に書いたメソッド
void methodrei(int y, int z, int a)
{
string x = "テスト";
Debug.Log(x);
Debug.Log(y+z+a);
Debug.Log("点");
}
これで再生すると、Startからmethodreiメソッドが呼び出されy、z、aが宣言され、それぞれ98、64、85が代入される。ログは「テスト」、「247」、「点」が表示される。
目次にもどる
返り値(戻り値)とは
返り値(戻り値)とはメソッドで処理した値を呼び出し元に返すことである。ちなみにStartやUpdateには一番最初にvoidがついていたし、今までの説明でもvoidをつけていた。voidは何も返さないという意味を持ち、返り値を返さない場合に使われる。
メソッドの呼び出し元に返り値を渡すためにはvoidを使わずに返り値の型を記述し、加えてreturnを使う必要がある。returnはデータを返すことができる。
例は以下の通り。
.jpg)
Start内に書いた記述
int d = x(3, 4, 2);
Debug.Log(d);
クラス内に書いたメソッド
int x(int a, int b, int c)
{
return a + b - c;
}
これで再生すると、StartメソッドがUnityにより呼び出され、int d = x(3, 4, 2);の記述により、xのメソッドが呼び出される。
変数のaに3、bに4、cに2が代入され、returnにより3+4-2で5と計算でき、その値が返り値となる。Start内メソッドで変数dに5が代入されることになる。dの値によりログ「5」が出る。
メソッドはint x(int a, int b, int c)となっており、intという返り値を定義している。返り値が定義されている場合は必ずメソッド内にreturnを入れて値を返す必要がある。
また、returnで値を返すとそれより下の処理は行われない点に注意しよう。
メソッドを呼び出して引数を渡して計算し、返り値を返すという方法はゲーム制作でよく使われるので、ぜひ覚えておきたい。
値の受け渡しの際には変数のスコープに注意する必要がある。以前紹介したが、クラス内メソッドの外で変数を宣言すればクラス内ならどのメソッドでも変数が使用可能となる。
だが、メソッド内で変数を指定した場合は他メソッドでは使えない。以下の例を見てほしい。

Start内に書いた記述
void Start()
{
int a = 3;
x(a);
Debug.Log(a);
}
クラス内に書いたメソッド
int x(int a)
{
a += 5;
return a;
}
Startでaに3を代入した後、xのメソッドを呼び出し、そこにaの値を渡して加算して返り値を返した。
だが、xのメソッドでaが使えるのはxのメソッドの中のみ。返り値をもらってもStart側で処理をしていないので意味がない。ログにはaに最初に代入された3が出力される。
以下のようにStart内記述を変えてみる。もらった返り値を代入するように記述したことで、ログは8になる。

Start内に書いた記述
void Start()
{
int a = 3;
a = x(a);
Debug.Log(a);
}
受け取った返り値を使って処理することを意識して記述を行っていこう。