【Unity入門】UnityのC#基礎【関数】

この記事は本のように順を追って解説しています。この記事は途中のページになります。この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。

<関数>

さて、以前StartとUpdateは関数というもので、Unity側から呼ばれて処理を行うものだよという風に言っていました。関数はclass(設計図)に書かれた一個一個の機能だよという風にも言っていました。関数はメソッドとも言います。StartとUpdateはUnityが自動で作ってくれていましたが、今回は自分で作ってみましょう。

関数の作り方は

返り値 名前 (引数){
}

です。よくわからないと思うので実際にやってみましょう。

method

↑の

void aaa()
{
}

というのが自分で作った関数です。

voidというのは以前出てきたと思いますが、何も返さないよという意味です。返すって何?って話ですが、後で説明するので今はスルーしましょう。

aaaっていのが関数の名前です。変数の時もそうでしたが、名前は何でも構いません。ただし、既に使われているものは使用できません。Unity側が使っている名前、C#側が使っている名前も使えません。

その後( )で囲んでいます。ここには引数と呼ばれるものが入ります。が、別になくてもいいので今回はなしでいきます。そして{ }で囲んだ中に機能を書いていきます。

さて、では作った関数に機能を持たせましょう。と言っても今回はDebug.Logでログを表示されるだけの機能を作ります。そして関数を呼び出してみましょう。

method call

さて、Startにaaa();と書いてあるのがわかるでしょうか。

これが関数の呼び出しです。こうする事で、StartがUnity側から呼び出される→aaaがStartから呼び出されるという形になります。

<引数を入れてみる>

さて、↑では( )の中は何もなしとしていました。ではこの中に何か入れてみましょう。この中に入れるもののことを引数と言います。この中の書き方は

(型名 名前,型名 名前,型名 名前・・・・)

という感じでたくさん書くことができます。

ちなみに最大で65536個書けるらしいです。書かねーよ

例えば

void aaa(int a, int b, int c)
{
}

みたいな感じですね。なんか変数みたいですが、まさにその通りで、この関数の中だけで使える変数になります。これもStartから呼び出して、Debug.Logで何か表示させてみましょう。

method call with argument

こんな感じです。Startでaaaを呼び出していますが、何やら数字が入っていますね。これが引数に代入されます。

つまりa = 1,b = 2,c = 3になるので、ログに表示されるのは6ですね。

このように関数に何かを渡して、関数の中で処理してもらうことができます。

<返り値(戻り値)>

返り値(戻り値)を返してみよう

さて、↑では「voidで返り値を返しませんよ。」とよくわからないことを言っていましたが、今度は実際に返り値を返してみて、返り値とは何なのかというのを確かめてみましょう。

返すにはvoidのところを型にします。そして、returnで返します。

やってみるとこんな感じです。

Function return value

voidだったところがintになっています。そしてreturnというのが書かれています。

この場合もログには6と表示されます。何を行なっているかというと

①Startでaaaを呼び出します。a=1,b=2,c=3を代入しています。
②aaaの中でa+b+cを計算します。つまり6です。
③aaaはreturnで6という数字をint型呼び出し元に返します
④Startでaaaを呼び出した所に6という数字がint型で返ってきます
⑤返ってきた6をint型のdに代入します。
⑥ログにdを表示します。>6と表示されます。

こんな感じです。

このように関数に引数で元となる物を与えて、中で処理して返すという手法はとても便利でよく活用すると思うので覚えておくといいと思います。また、返り値は戻り値とも言います。

returnについて

returnは値を返すものです

関数の返り値が定義されているときは絶対に書かなくてはいけません。

反対に返り値がvoidと書いた時は何も返さないという意味になるのでreturnは書く事ができません。

そして、returnで値を返すとその関数は処理が終わったとみなされます。

under return function

↑のように書いた場合、コンソールには1とは表示されますが、aaaとは表示されません。何故かというと、returnで値を返しているのでそこで処理が終わったとみなされてDebug.Log(“aaa”);が処理されずに終わります。

<関数の処理順>

さて、関数の書き方について解説してきましたが、呼び出した時の処理の順番がどうなるのかみてみましょう。

log function

Start内で関数aaaを呼び出していますが、この関数は一体どういう順番で処理されるかをみていきましょう。

log result

答えは↑のようになります。

関数内で関数を呼び出すと、呼び出した関数の処理が終わってから次の処理へ進みます。これは1フレーム内で行われます。

<関数を複数回呼ぶ>

実は関数は何回も呼び出す事ができます。

Call a function many times

このように何度呼び出してもOKです。

↑の場合bは関数の外に書いてあるためずっと有効になっています。そのため、何回もaaa()を呼び出すと呼び出されたタイミングでbがプラス1されます。

そのため、↑の状態ではコンソールに5と表示されます。

では関数内に変数を書いたらどうなるかやってみましょう。

Variable in function

関数内に変数を書いてひたすら返しています。これを実行するとコンソールに1と表示されると思います。

変数は同じ名前であってもスコープ(有効な範囲)は関数の中のみですので、何回返そうが1が返ってくるわけですね。

<まとめ>

さて、今回の解説をまとめると

Point

・引数を書く事で関数に値を渡す事ができるよ!
・関数は呼び出し元に値を返す事ができるよ!
・値を返さない場合はvoidと書くよ!
・関数を呼び出したら、その関数が終わってから先の処理へ進むよ!
・関数は何回でも呼び出していいよ!
・変数のスコープには注意してね!

<わからない事があったら>

このサイトの説明ではよくわからなかったとか、もっと知りたい事などがあれば、また別の勉強方法があるので違った切り口を使ってみるのもいいと思います。

<オススメの本>

本で詳しい解説がされているので書籍を買ってみるというのも手の一つです。最近はKindle版があるので届くまで待つ事もなく場所も取らないのでとても良いです。

<オンラインスクール>

オンラインスクールでは人に質問する事ができるので、行き詰まってしまった方にオススメです。 無料体験もあるので試しに見てみるのも手ですよ




次はちょっとプログラムらしいことをやってみたいと思います。




タイトルとURLをコピーしました