スクリプトを書いているうちに、Updateの中身がどんどん長くなっていませんか?
移動、ジャンプ、攻撃、HPチェック…全部をUpdateに詰め込むと、どこで何をしているか分からなくなります。
C#の関数(メソッド)を使えば、処理を塊ごとに分けて、読みやすく保守しやすいコードにできます。
この記事では、voidと戻り値、引数と呼び出し、移動・攻撃を関数化する具体例まで解説します。
変数の記事と合わせて読むと理解が深まります。
- Updateが100行以上になって、自分でも内容を把握できなくなった
- voidやreturnの意味が分からず、関数の書き方でエラーになる
- 同じ処理をコピペして使い回しており、修正箇所が増えている
✨ この記事でわかること
- 関数(メソッド)とは何か
- voidと戻り値の違い
- 引数の渡し方と呼び出し方
- 移動・攻撃を関数に分ける例
- 長いUpdateを避ける理由
- 初心者でも理解できる解説
\プログラミング未経験でも大丈夫!まずは1本作り切ろう/
初心者が最初に選ぶならコレ
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。
憧れのアクションゲームに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。
3Dゲーム開発の入口はここ
ゼルダ風3Dアクションゲーム
の作り方講座
「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。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関数の中に移動処理を書かない、と線引きしましょう。
- STEP1Updateの処理を箇条書き
移動、入力、攻撃、HP更新…やっていることをリストアップします。
- STEP2塊ごとに関数を切り出す
HandleMove、HandleAttackのように名前を付け、中身を移動します。
- STEP3Updateは呼び出しだけ
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をスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも迷わず進められる丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。
全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。
「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも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つ関数に切り出すところから、試してみてください。



コメント