初心者必見!現場レベルの「ゲーム制作講座PDF」を無料プレゼント中!▶

UnityのC#関数の書き方 | 処理を分けて読みやすく

Unity 基礎操作・設定

スクリプトを書いているうちに、Updateの中身がどんどん長くなっていませんか?

移動、ジャンプ、攻撃、HPチェック…全部をUpdateに詰め込むと、どこで何をしているか分からなくなります。
C#の関数(メソッド)を使えば、処理を塊ごとに分けて、読みやすく保守しやすいコードにできます。

この記事では、voidと戻り値、引数と呼び出し、移動・攻撃を関数化する具体例まで解説します。
変数の記事と合わせて読むと理解が深まります。

  • Updateが100行以上になって、自分でも内容を把握できなくなった
  • voidやreturnの意味が分からず、関数の書き方でエラーになる
  • 同じ処理をコピペして使い回しており、修正箇所が増えている

この記事でわかること

  • 関数(メソッド)とは何か
  • voidと戻り値の違い
  • 引数の渡し方と呼び出し方
  • 移動・攻撃を関数に分ける例
  • 長いUpdateを避ける理由
  • 初心者でも理解できる解説

\プログラミング未経験でも大丈夫!まずは1本作り切ろう/

初心者が最初に選ぶならコレ

Unity ノンフィールドRPG
+スレスパ風JRPG講座

★★★★★ (Unity6対応)

Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。

講座を見てみる \ゼロからでもスマホ対応RPGが作れる!/

憧れのアクションゲームに挑戦

Unity 2Dアクションゲーム
の作り方講座(ロックマン風)

★★★★★ (スマホ化・広告実装)

初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。

講座を見てみる \初心者でも本格ACTが完成する!/

3Dゲーム開発の入口はここ

ゼルダ風3Dアクションゲーム
の作り方講座

★★★★★ (スマホ化対応)

「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。

講座を見てみる \初心者でも全16回で3Dゲームが完成!/

関数(メソッド)とは何か

関数は、処理を1つの塊にまとめたものです。
名前を付けておけば、必要なときに何度でも呼び出せます。

たとえば「プレイヤーを右に動かす」処理をMoveRightという関数にまとめると、Updateからは次の1行で済みます。

void Update
{
    MoveRight;
}

関数に分けるメリットは次のとおりです。

  • Updateが短くなり、全体の流れが読みやすくなる
  • 同じ処理を複数箇所から呼び出せる
  • バグ修正が1か所で済む
  • 関数名が処理内容の説明になる

voidと戻り値の違い

関数には、結果を返すかどうかの2パターンがあります。

種類 書き方 使い道
void(戻り値なし) void MoveRight { … } 移動、攻撃、SE再生など「実行するだけ」の処理
戻り値あり int GetScore { return score; } 計算結果や状態を呼び出し元に返すとき

戻り値がある関数は、returnで値を返します。
呼び出し側では、その値を変数に受け取れます。

int CalculateDamage(int basePower, float multiplier)
{
    return Mathf.RoundToInt(basePower * multiplier);
}

void Start
{
    int damage = CalculateDamage(10, 1.5f);
    Debug.Log("ダメージ:" + damage);
}

void関数は「何かを実行する」、戻り値あり関数は「答えを返す」と覚えると整理しやすいです。

引数の渡し方

関数の引数(パラメータ)は、呼び出すときに渡すデータです。
同じ関数でも、引数を変えれば異なる動きができます。

void Move(float direction)
{
    transform.Translate(Vector3.right * direction * moveSpeed * Time.deltaTime);
}

void Update
{
    float h = Input.GetAxis("Horizontal");
    Move(h);
}

Move関数はdirectionを受け取り、右方向への移動量を計算します。
引数hが-1なら左、1なら右に動きます。
処理の本体はMoveに集約されているので、Updateは入力取得と呼び出しだけに専念できます。

管理人
管理人

関数名は「動詞から始める」と分かりやすいです。
Move、Attack、TakeDamageのように、何をする関数か一目で伝わる名前を付けましょう。

移動と攻撃を関数に分ける例

変数と関数を組み合わせた、実践的な例を見てみましょう。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [SerializeField] private float moveSpeed = 5f;
    [SerializeField] private int attackPower = 15;
    [SerializeField] private float attackCooldown = 0.5f;

    private float lastAttackTime = 0f;

    void Update
    {
        HandleMove;
        HandleAttackInput;
    }

    void HandleMove
    {
        float h = Input.GetAxis("Horizontal");
        transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime);
    }

    void HandleAttackInput
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Attack;
        }
    }

    void Attack
    {
        if (Time.time - lastAttackTime < attackCooldown) return;
        lastAttackTime = Time.time;
        Debug.Log("攻撃!威力:" + attackPower);
    }
}

UpdateはHandleMoveとHandleAttackInputを呼ぶだけです。
移動の詳細はHandleMove、攻撃の詳細はAttackに閉じ込められています。
あとから「ジャンプを追加したい」となったら、HandleJump関数を足してUpdateから呼ぶだけで済みます。

長いUpdateを避ける理由

Updateに全部書く書き方は、最初は楽に見えます。
しかし機能が増えると、次の問題が起きやすくなります。

  • どの行が移動で、どの行が攻撃か判別しにくい
  • 1行を直したら、別の機能まで壊れる
  • チームで共同開発するとき、同じファイルで競合しやすい
  • テストやデバッグの単位が大きくなり、原因特定に時間がかかる

「1関数=1つの役割」を意識すると、コードの品質が上がります。
Move関数の中に攻撃処理を書かない、Attack関数の中に移動処理を書かない、と線引きしましょう。

関数分割の手順
  • STEP1
    Updateの処理を箇条書き

    移動、入力、攻撃、HP更新…やっていることをリストアップします。
  • STEP2
    塊ごとに関数を切り出す

    HandleMove、HandleAttackのように名前を付け、中身を移動します。
  • STEP3
    Updateは呼び出しだけ

    Updateから各関数を呼ぶ形に整理します。

関数の呼び出しタイミング

関数は、定義しただけでは実行されません。
呼び出す必要があります。
Unityでは、主に次のタイミングで呼びます。

  • UpdateやStartから呼ぶ(毎フレーム、または開始時)
  • 入力イベント(ボタンクリック、キー入力)に反応して呼ぶ
  • 他の関数から呼ぶ(Attackの中からPlaySoundを呼ぶなど)
  • UnityEventやアニメーションイベントから呼ぶ

public void Attackのようにpublicを付けると、他のスクリプトやInspectorのUnityEventからも呼び出せます。
内部だけで使う関数はprivate voidにしておきましょう。

管理人
管理人

リファクタリング(整理)は、ゲームが動いた後で大丈夫です。
まず動かして、長くなってきたら関数に分ける。
焦らずこの順番で進めましょう。

よくあるエラーと対処

関数を書くときによく出るエラーをまとめます。

  • 戻り値があるのにreturnがない → すべての分岐でreturnするか、voidに変更
  • 引数の型が合わない → Move(“文字列”)のように、期待する型と渡す値を確認
  • 関数名のスペルミス → 呼び出し側と定義側の名前を完全一致させる
  • アクセス修飾子の違い → private関数を外部から呼ぼうとしていないか確認

Consoleのエラーメッセージには、行番号が表示されます。
ダブルクリックで該当箇所に飛べるので、1つずつ潰していきましょう。

関数を増やしすぎると、今度は「どの関数から呼べばいいか分からない」状態になります。
Updateから呼ぶ入口を1〜2に絞り、HandleMoveのようにHandleで始める命名にそろえると、全体の流れを追いやすくなります。

管理人
管理人

関数が身についてきたら、次はクラスで「敵のデータと処理」をまとめる学習に進みましょう。
ゲーム設計の幅が広がりますよ。

記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう

知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。

Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座

  • Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
  • Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
  • 初心者でも迷わず進められる丁寧な解説構成
  • ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。

Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。

「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。

Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!

Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

Unity 2Dアクションゲームの作り方講座(ロックマン風)

  • ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
  • 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
  • スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
  • 敵AI15体・多彩なマップギミック・武器システムを完全実装
  • 完全オリジナルゲームをアセット不使用で素材提供付きで制作

Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。

全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。

「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。

スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!

ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

ゼルダ風3Dアクションゲームの作り方講座

  • ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
  • 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
  • スマホ化対応で実機で動かせるゲームが完成
  • アセットを使った実践的なゲーム開発手法が身につく
  • 画像・動画・全ソースコード公開の充実したサポート

ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。

全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。

「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。

初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!

まとめ

UnityのC#関数は、処理を名前付きの塊に分けるための仕組みです。
voidは実行だけ、戻り値ありは結果を返す、引数で呼び出し時にデータを渡します。
Updateは短く保ち、MoveやAttackに詳細を任せる構成が読みやすいコードの基本です。

同じ処理のコピペは関数化のサインです。
動く状態を保ちながら、少しずつ切り出していきましょう。
変数と関数が使えるようになれば、小さなゲームの大半は書けるようになります。

実践的な流れで学びたい方は、Unity入門の森の講座も参考になります。
移動・攻撃・UI連携まで、完成に近い形でコードの書き方を追えます。
今日はUpdateの中身を1つ関数に切り出すところから、試してみてください。

コメント

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