Unity C#の基礎|メソッドの作成と呼び出しを理解しよう

UnityでC#を使ってゲームを作る際、メソッド(関数)の概念を理解することはとても重要です。メソッドを活用することで、コードを整理し、再利用しやすくなります。この記事では、C#のメソッドの基本を学び、実際にUnityで動作するコードを書いてみましょう。

記事の最後には、学んだ内容を確認する演習問題も用意しているので、ぜひチャレンジしてみてください!


メソッドとは?

メソッドとは、一連の処理をまとめて再利用できるようにしたコードのブロックのことです。一度作成すれば何度でも呼び出すことができます。

例えば、キャラクターのジャンプ処理やスコアの計算処理をメソッドにまとめることで、コードが分かりやすくなり、何度でも呼び出せるようになります。

メソッドを使うメリット

  • コードの再利用が可能(同じ処理を何度も書かなくてよい)
  • 可読性が向上(コードが整理されて理解しやすくなる)
  • バグが少なくなる(修正がしやすくなる)

メソッドの基本的な作成方法

C#のメソッドは、次のような構文で作成します。

戻り値の型 メソッド名(引数)
{
    // 実行する処理
    return 戻り値;
}

例えば、数値を2倍にするメソッドを作ってみましょう。

int DoubleNumber(int number)
{
    return number * 2;
}

このメソッドは、整数 (int) を受け取り、その値を2倍にして返します。


実際にUnityでメソッドを作成してみよう

次に、UnityのMonoBehaviourを使ってメソッドを作成し、それを呼び出す方法を学びましょう。

メソッドを作成

Unityのスクリプト (C#) でメソッドを作成するには、MonoBehaviour を継承したクラス内にメソッドを定義します。

例: 足し算をするメソッドを作成する
using UnityEngine;

public class MethodExample : MonoBehaviour
{
    // 数値を受け取り、合計を返すメソッド
    int AddNumbers(int a, int b)
    {
        return a + b;
    }

    void Start()
    {
        int result = AddNumbers(5, 10);
        Debug.Log("足し算の結果: " + result);
    }
}

実行結果

このスクリプトをUnityのオブジェクトにアタッチして再生すると、コンソールに「足し算の結果: 15」 と表示されます。


戻り値がないメソッド(void)

戻り値を返さないメソッドを作る場合は、voidを使います。

例: メッセージを表示するメソッド
void ShowMessage()
{
    Debug.Log("こんにちは、Unity!");
}

このメソッドは、引数も戻り値もありません。Debug.Log() を使ってコンソールにメッセージを表示するだけです。

UnityのStart() メソッドで呼び出してみましょう。

using UnityEngine;

public class VoidMethodExample : MonoBehaviour
{
    void ShowMessage()
    {
        Debug.Log("こんにちは、Unity!");
    }

    void Start()
    {
        ShowMessage();
    }
}
実行結果

Unityのコンソールに「こんにちは、Unity!」と表示されます。


メソッドの引数と戻り値

メソッドには、引数(パラメータ) を渡したり、戻り値 を受け取ったりすることができます。

引数を受け取るメソッド

引数を利用することで、メソッドに柔軟な処理をさせることができます。

例: 文字列を受け取って表示するメソッド
void Greet(string name)
{
    Debug.Log("こんにちは、" + name + "さん!");
}

このメソッドを呼び出すには、Greet(“田中”) のように名前を渡します。

戻り値を持つメソッド

戻り値が必要な場合は、計算結果などを返すメソッドを作成します。

例: 二乗を計算するメソッド
int Square(int number)
{
    return number * number;
}

このメソッドを呼び出して結果を表示してみましょう。

using UnityEngine;

public class ReturnMethodExample : MonoBehaviour
{
    int Square(int number)
    {
        return number * number;
    }

    void Start()
    {
        int result = Square(4);
        Debug.Log("4の二乗: " + result);
    }
}
実行結果

Unityのコンソールに「4の二乗: 16」と表示されます。


メソッドの活用例

ゲームでよく使われるメソッドの例を紹介します。

プレイヤーのジャンプメソッド

以下のコードは、プレイヤーがスペースキーを押したときにジャンプする処理をメソッド化した例です。Jump() メソッドを呼び出すことで、ジャンプ処理をまとめています。

using UnityEngine;

public class Player : MonoBehaviour
{
    public float jumpForce = 5f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // スペースキーが押されたらジャンプ
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Jump();
        }
    }

    void Jump()
    {
        rb.velocity = Vector3.up * jumpForce;
        Debug.Log("ジャンプした!");
    }
}

このコードでは、Jump() メソッドが実際のジャンプ動作を担当しており、コード全体の見通しが良くなっています。

オブジェクトの移動処理

オブジェクトの移動も、メソッド化することでコードの再利用が容易になります。以下の例では、前進移動をメソッド Move() にまとめ、Update() メソッド内で呼び出しています。

using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    // 移動処理のメソッド
    void Move(float speed)
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }

    void Update()
    {
        // 毎フレーム移動処理を呼び出す
        Move(5f);
    }
}

このように、移動処理をメソッドにまとめることで、移動速度や方向を柔軟に変更できる設計が可能です。


演習問題

問題1: 「引数を受け取り、足し算するメソッド」を作成しよう

次の条件を満たすメソッドを作成してください。

  • int 型の引数を2つ受け取る
  • 受け取った数値を足し算して返す
  • Start() メソッド内で実行し、結果を表示する

問題2: 「プレイヤーの移動メソッド」を作成しよう

次の条件を満たすメソッドを作成してください。

  • float 型の移動速度を引数にする
  • transform.Translate() を使ってオブジェクトを前進させる
  • Update() メソッド内でMove()を呼び出す

解答例

問題1の解答

int Add(int a, int b)
{
    return a + b;
}

void Start()
{
    int result = Add(7, 3);
    Debug.Log("足し算の結果: " + result);
}

問題2の解答

using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    void Move(float speed)
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }

    void Update()
    {
        Move(5f);
    }
}

まとめ

この記事では、C#のメソッドの基本を学びました。メソッドを活用すると、コードを整理し、再利用しやすくなります。

Unityの開発でも頻繁に使うため、しっかり理解しておきましょう!