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

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

【Unityで始めるC#ゲーム開発】戻り値をもつメソッドはどう使う?活用事例をご紹介!

戻り値を持つメソッドとは?


 メソッドとは、特定の処理を実行するためのコードのブロックです。 一部のメソッドは「戻り値(返り値)」を持ちます。これは、メソッドがその処理を終えたときに返す値のことを指します。

 C#では、メソッドを定義する際に、そのメソッドが何の型の値を返すかを指定します。 例えば、次のような形でメソッドを定義します。


public int AddNumbers(int a, int b)
{
    return a + b;
}


 上記の例では、AddNumbersという名前のメソッドが2つの整数を引数に取り、それらを足した結果(a + b)を戻り値として返します。



戻り値の考え方


 戻り値とは、一言で言えば「メソッドからのお返し」です。 これは、日常生活で言えば、スーパーマーケットで商品を購入するときのレシートのようなものと考えることができます。 あなたがスーパーマーケットでいくつかの商品をカートに入れ、レジで支払いをすると、店員さんからレシートが渡されます。 このレシートが、あなたが行った「商品を買う」という行為の「戻り値」に相当します。



 プログラミングの世界で言うと、メソッドは特定のタスク(処理)を実行します。 このタスクが「商品を買う」行為に相当し、その結果として何かしらの「レシート」(戻り値)を提供します。 これは、整数値(例えば、2つの数値の合計)、オブジェクト(例えば、新しく生成されたゲームオブジェクト)、 真偽値(例えば、ある条件が満たされているかどうか)など、様々な形をとります。 何もない場合に限り、void と記述します。

 そのため、メソッドの戻り値は、そのメソッドが何を行い、それによって何が得られたのかを表しています。 戻り値を適切に利用することで、コードはより柔軟で効率的になり、プログラムはより理解しやすいものとなります。




Unityで用意されている、戻り値をもつメソッド例


 Unityでは、さまざまなメソッドが提供されており、それらの一部は戻り値を持ちます。 以下に、よく使われる戻り値をもつメソッドの例をいくつか挙げます。

Input.GetKeyDown

 このメソッドは指定したキーの押下有無に対してフレームで bool 型を返します。

GetComponent

 このメソッドは、ゲームオブジェクトにアタッチされている指定した型のコンポーネントを返します。

GameObject.Find

 このメソッドは、指定した名前の GameObject 型を返します。

Physics.Raycast

 このメソッドは投射した Ray に対しての、コライダーのヒット有無を bool 型で返します。

Random.Range

 このメソッドは引数で指定した範囲内のランダムな整数を int 型で返します。

Instantiate

 このメソッドは第1引数で生成されたオブジェクトの型の値を返します。



戻り値のあるメソッドの利用法


 戻り値のあるメソッドは非常に多機能で、プログラム内の多くの場所で利用できます。 ここでは、if文の条件式、代入処理の右辺、メソッドの引数への指定といった具体的な利用方法について解説します。



1.if文の条件式での利用


 戻り値のあるメソッドは、if文の条件式でよく使われます。 特に、戻り値が真偽値(bool)のメソッドは、ある条件が真か偽かを判断するために使用されます。以下に具体例を示します。


void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("Space キーが押されました");
    }
}


 この例では、Input.GetKeyDown(KeyCode.Space)はスペースキーが押されたときにtrueを返すため、この戻り値を用いて条件分岐を行っています。 何気なく利用している処理ですが、戻り値の機能を活用して作られています。



2.代入処理の右辺での利用


 戻り値は、新たな変数を宣言し初期化する際や、既存の変数の値を更新する際にも使用されます。


int sum = AddNumbers(5, 3);
Debug.Log(sum);  // Console ビューには 8 と表示


 この例では、AddNumbers(5, 3) メソッドが整数値を返し、その戻り値が変数sumに代入されています。



3.メソッドの引数への指定


 メソッドの戻り値を、別のメソッドの引数として直接使用することも可能です。


Debug.Log(Random.Range(0, 10));


 この例では、Random.Range(0, 10)がランダムな整数を返し、その戻り値がDebug.Log()メソッドの引数として渡され、コンソールに出力されます。



4.メソッドチェーン


 あるメソッドの戻り値がさらに別のメソッドを持つオブジェクトである場合、その戻り値から直接メソッドを呼び出すことができます。 これはメソッドチェーンと呼ばれます。これによりコードを簡潔に書くことができます。


GameObject.Find("Player").GetComponent<Rigidbody>().AddForce(Vector3.up * 10f);


 上記のコードでは、Find("Player")の戻り値から直接GetComponent()を呼び出し、その戻り値から直接AddForce(Vector3.up * 10f)を呼び出しています。 変数にキャッシュしておく必要がない場合などには、こういった方法を利用することで簡潔に処理を記述できます。



5.条件式における複数のメソッドの組み合わせ


 戻り値を使用して複雑な条件式を作成することも可能です。


if (Input.GetKeyDown(KeyCode.Space) && Random.Range(0, 10) > 2)
{
    Jump();
}


 このコードでは、GetKeyDown(KeyCode.Space)とRandom.Range(0, 10) の2つのメソッドの戻り値を組み合わせて複雑な条件を作成しています。



まとめ


 以上のように、戻り値のあるメソッドは多種多様な場面で利用でき、プログラムの表現力を豊かにします。 これらの利用法を理解し活用し、プログラムを書く人の発想力次第で、より洗練された、効率的なコードを書くことができます。

 一度概念を理解したら、自分のコードの中でどのようにそれを使用できるかを探してみて実践してください。