0からスタート!ゲーム開発ブログ

ゲーム開発に関する様々な記事を更新します

【Unityで始めるC#ゲーム開発】メソッド(関数)とは?作り方や呼び出し方を紹介

 この記事では、メソッドについてわかりやすく解説します。 サンプルコードを通じてメソッドの機能と使い方を理解しましょう。



メソッドとは


 メソッドは、プログラム内で特定の処理を行うためのコードのまとまりです。

 例えば、自動販売機で飲み物を買う際、ボタンを押すだけで、購入した飲み物の選択から最終的な出庫までの一連の手順が実行されて、飲み物が出てきます。

 同様に、プログラムでは、特定の処理を行いたいときにメソッド(自動販売機のボタン)を呼び出すことで、その処理に必要な一連の手順を実行できます。 仮に20行あるプログラムを1つのメソッド内にまとめておくと、この20行ある処理を1行のメソッドの命令処理で実行できるようになります。

 ゲーム内の処理にも例えてみましょう。プレイヤーが敵キャラクターを倒した際に、スコアを加算する処理があるとします。 このスコアを加算する処理をメソッドとして定義しておく(書いておく)ことで、敵キャラクターが倒されるたびにそのメソッドを呼び出す(実行命令をする)だけで、スコアの加算処理が実行されます。

 つまり、メソッドという形でまとまりを作り、その中に特定の処理(スコアの加算処理など)を書いておけば、 メソッドになってまとまっている処理は、1行の命令処理を書くだけでまとめて実行できます。よって、同じ処理を何度も書かずに済みます

 まさに自動販売機のボタンですね。 メソッドを使うことで、必要な処理を簡単に実行できるようになる訳です。



メソッドの定義の書き方


 メソッドを定義する際には、以下の要素を左から順番に1行で書きます。


  • アクセス修飾子(public、private など)
  • 戻り値の型(int、string など。ない場合には void と書く)
  • メソッド名(DoubleScore など)
  • 引数(ひきすう)(int score など)


例:

private int DoubleScore(int score)


 この例では、「private」というアクセス修飾子で 「int」という戻り値の型を持つ「DoubleScore」という名前のメソッドを定義しています。 また、「int score」という引数を受け取っています。


 それではメソッドを定義している要素を見ていきましょう。 説明の関係上、メソッド名、アクセス修飾子、引数、戻り値の順番で解説します。



メソッド名と命名規則


 メソッド名は任意に設定できますが、そのメソッドが何をするのかを簡潔に表す名前にします。 多くの場合、そのメソッドが行う動作を表す動詞で始め、単語の最初の文字を大文字にし、それ以外の文字を小文字にします。 例えば、「CalculateArea」や「PrintMessage」のように書きます。

 メソッド名は短くてわかりやすいものにしましょう。 ただし、短すぎて意味がわからない名前は避けるようにしてください。



アクセス修飾子


 アクセス修飾子は、メソッドがどの範囲から使えるかを決めるキーワードです。

 主に以下の2つがよく使われます。


  • public: どこからでもアクセスできる
  • private: 同じクラス内からのみアクセスできる


 public なメソッドは、他のクラスからもアクセスが可能で、コード全体で共有する機能やデータを扱うのに適しています。 一方、private なメソッドは、同じクラス内でのみアクセスができそのクラス固有の処理に使われます。

 また、private 修飾子は省略することが可能です。 例えば Start メソッドでは、void Start () と定義していますが、これは private 修飾子が省略されています。


サンプルコード

    private void Greet()
    {
        // 画面に挨拶を表示する private メソッド
    }

    public void ShowName()
    {
         // 画面に名前を表示する public メソッド
    }


 このサンプルでは、Greet() という private メソッドと、ShowName() という public メソッドを定義しています。 Greet() メソッドは private なので、このメソッドの定義しているクラス内からしかアクセスできません。

 一方、ShowName() メソッドは public なので、他のクラスからもアクセスが可能です。 アクセス修飾子の機能により、メソッドがどのような範囲でアクセスされるかを制御できます。




引数


 引数(ひきすう)は、メソッドに渡す値のことです。例えば、サイコロを振る場合の、振る回数引数に利用できます。 サイコロの振る回数を指定できるようにすることで、1回だけ振る場合や、何度も振る場合など、様々なケースに対応できるようになります。

 ここでは、メソッドの実行命令の書き方も含めて、サンプルを提示します。



サンプルコード

using UnityEngine;

public class DiceExample : MonoBehaviour
{
    void Start()
    {
        // RollDice メソッドを呼び出し、引数に3を渡して3回ダイスを振る
        RollDice(3); // ← ☆メソッドの実行命令
    }

    // 引数で指定された回数分ダイスを振るメソッド
    private void RollDice(int times)
    {
        for (int i = 0; i < times; i++)
        {
            int result = Random.Range(1, 7); // 1から6までの整数をランダムに選ぶ
            Debug.Log("ダイスの結果: " + result);
        }
    }
}


 このサンプルコードでは、RollDiceメソッドがダイスを振る処理を担当しています。 引数timesは、ダイスを振る回数を指定するために使われています。

 StartメソッドでRollDice(3)と呼び出すことで、3回ダイスを振ることができます。 定義したメソッドはメソッドの名前と引数を書くことで実行命令を出すことが出来ます。 逆に言うと、実行命令を書かない限り、実行されません。これは自動的に動き出す Start メソッドなどとの大きな違いです。

 Startメソッドで実行しているRollDice() の引数を変えることで、ダイスを振る回数を変更することが出来ます。

 このように引数を使うことで、メソッド内の処理に柔軟性を持たせることができます。



戻り値


 戻り値は、メソッドが処理結果を呼び出し元に返す値のことです。 呼び出し元、とは、メソッドの実行命令を書いている場所です。

 戻り値のイメージは、図書館で本を借りるときのようなものです。 あなたが図書館に行って、特定の本を借りたいとリクエストします。これが戻り値のあるメソッドの実行命令にあたります。 図書館員は、その本を探し出し、あなたに手渡します。これがメソッド内で行われる処理と結果です。 この場合、あなたがリクエストした本が「戻り値」になります。 つまり、戻り値のあるメソッドを実行することで、特定の結果(戻り値)を受け取ることができます。

 戻り値には任意のデータ型を1つ設定することが出来ます。 int 型、string 型、GameObject 型など、どれでも利用できます。 このデータ型の値を return 文を利用することで、呼び出し元に返します。

 戻り値のないメソッドの場合には、void と書きます。 これが戻り値のないメソッドの目印になります。 Start メソッドや Update メソッドなどは void になっていますので、これらは戻り値のないメソッドになります。


サンプルコード

using UnityEngine;

public class ReturnValueExample : MonoBehaviour
{
    void Start()
    {
        // AddNumbers メソッドを実行し、その処理結果から足し算の答えを受け取る
        int sum = AddNumbers(7, 5);
        Debug.Log("7 + 5 の答えは: " + sum);
    }

    // 二つの数を足して結果を返すメソッド
    private int AddNumbers(int number1, int number2)
    {
        return number1 + number2;
    }
}


 このサンプルでは、AddNumbers()メソッドが戻り値として二つの数の合計を返しています。 戻り値の値を処理しているのは、return number1 + number2; の部分です。return の右側にある値が返ります。

 Start()メソッド内ではAddNumbers()を呼び出し、受け取った解答を画面に表示します。 この例では、"7 + 5 の答えは: 12"と表示されます。

 戻り値のポイントはプログラムの見た目に騙されないことです。 プログラムを見ただけでは、12 という値が戻ってくるのか、直感的にわかりにくいですね。

 そのため、特に戻り値のあるメソッドの場合、プログラムの見た目だけではなく 実際の処理の内容を元に、自分の頭の中で書かれている内容を置き換えてプログラムを読み解く力が必要になります。



まとめ


 この記事では、メソッドについて説明しました。

 自分で定義したメソッドは、プログラムで明示的に呼び出す(実行命令を書く)必要がありますが、 StartメソッドやUpdateメソッドなどのUnityが提供する特別なメソッドと一緒を活用することで、ゲーム制作に役立てることができます。