【Unity】Unity開発者のためのC#入門 - これだけは押さえたい基礎知識

作成: 2025-12-07最終更新: 2026-07-13

Unityでゲームを動かす言語、C#。この記事では、Unity開発を始める上で最低限知っておくべきC#の基本的な文法(変数、データ型、関数、制御構文)を、初心者向けに優しく解説します。

Unityを始めてすぐにぶつかる壁が「スクリプト」ではないでしょうか。英語と記号だらけのコードを見て、そっとエディタを閉じたくなった——そんな経験がある方も大丈夫です。ゲームを動かすのに、C#のすべてを覚える必要はありません。

Unityでゲームのロジックを書くための言語が C#(シーシャープ) です。この記事では、スクリプトを書き始める上で「これだけは知っておきたい」という基礎中の基礎——変数、データ型、関数、if文とfor文——に絞って、ひとつずつ解説します。

C#プログラミングの基礎のイメージ。基礎部品となるブロックをひとつずつ積み上げて学んでいく

この記事でわかること

  • 変数とデータ型(値を入れておく「箱」の使い方)
  • 関数(処理をひとまとめにして再利用する方法)
  • if文とfor文(分岐と繰り返しの基本)
  • public変数とInspectorの便利な関係

Sponsored

変数とデータ型

変数 とは、数値や文字列などのデータ(値)を入れておくための「箱」のようなものです。C#では、この箱に何を入れるかに応じて、 データ型 を明確に指定する必要があります。

変数は値を入れる箱、データ型は箱の種類であることを表す図。intの箱には整数、floatの箱には小数、boolの箱にはオンオフ、stringの箱には文字列を入れる

Unityで特によく使われる基本的なデータ型を見ていきましょう。

データ型説明
int整数(-2, -1, 0, 1, 2...)int playerScore = 100;
float浮動小数点数(小数)。数値の末尾にfを付ける。float speed = 5.5f;
bool真偽値(trueかfalseのどちらか)bool isGameOver = false;
string文字列。ダブルクォーテーションで囲む。string playerName = "Hero";
Vector33次元のベクトル(x, y, z座標)。位置や方向を表す。Vector3 startPosition = new Vector3(0, 1, 0);
GameObjectUnityのゲームオブジェクトそのもの。public GameObject playerObject;

変数の宣言と使い方

変数は [データ型] [変数名]; の形で宣言し、= を使って値を代入します。

using UnityEngine;

public class VariableExample : MonoBehaviour
{
    // 変数の宣言
    int health;         // 体力(整数)
    float moveSpeed;    // 移動速度(小数)
    bool isJumping;     // ジャンプ中か?(真偽値)

    void Start()
    {
        // 変数に値を代入
        health = 100;
        moveSpeed = 7.5f;
        isJumping = false;

        // 変数の値をコンソールに出力
        Debug.Log("体力: " + health);
        Debug.Log("移動速度: " + moveSpeed);
    }
}

注意: 初心者がつまずきやすいポイントが2つあります。(1) floatの値には末尾に必ずfを付けること(5.5ではなく5.5f。付け忘れるとエラーになります)。(2) stringの値は必ずダブルクォーテーション"で囲むこと。エラーが出たら、まずこの2つを疑ってみてください。

public変数

変数の前にpublicキーワードを付けると、その変数はUnityエディタのInspectorウィンドウに表示され、プログラマーでなくても値を調整できるようになります。これはゲームバランスの調整などに非常に便利です。

using UnityEngine;

public class PlayerSettings : MonoBehaviour
{
    // public変数はInspectorに表示される
    public string playerName = "Default Name";
    public float jumpPower = 10f;
    public int maxHealth = 200;
}

一歩進んだ書き方: publicにした変数は、Inspectorに表示されるだけでなく、 他のどのスクリプトからも自由に書き換えられる ようになります。「Inspectorで調整したいだけ」のときは、[SerializeField] privateと書くのが実際の開発では定番です。

// Inspectorには表示されるが、他のスクリプトからは触れない
[SerializeField] private float jumpPower = 10f;

最初のうちは「Inspectorに出したいだけなら[SerializeField] private」と型で覚えてしまって大丈夫です。

Sponsored

関数(メソッド)

関数 (または メソッド )は、特定の処理をひとまとめにしたものです。関数を定義しておくことで、同じ処理を何度も呼び出して再利用できます。

C#の関数は以下のように定義します。

[戻り値の型] [関数名]([引数]) { ...処理... }

  • 戻り値の型: 関数が処理を終えた後に返す値のデータ型。値を返さない場合はvoidを指定します。
  • 関数名: 関数の名前。処理内容がわかるような名前を付けます。
  • 引数: 関数に渡す情報。複数ある場合はカンマで区切ります。不要な場合は空にします。

イメージとしては「材料(引数)を入れると、加工された結果(戻り値)が出てくる機械」です。

関数は入力を受け取り処理して結果を返す機械であることを表す図。Add(a, b)という機械に引数の10と5を入れると、戻り値の15が出てくる
using UnityEngine;

public class FunctionExample : MonoBehaviour
{
    void Start()
    {
        // 関数を呼び出す
        SayHello();

        // 引数を渡して関数を呼び出し、戻り値を受け取る
        int result = Add(10, 5);
        Debug.Log("10 + 5 = " + result);
    }

    // 引数も戻り値もない関数
    void SayHello()
    {
        Debug.Log("こんにちは!");
    }

    // int型の引数を2つ受け取り、int型の値を返す関数
    int Add(int a, int b)
    {
        int sum = a + b;
        return sum; // returnキーワードで値を返す
    }
}

UnityのStartUpdateも、Unityエンジンによって特定のタイミングで呼び出される特殊な関数の一種です。

制御構文

プログラムの流れをコントロールするのが 制御構文 です。ここでは最も基本的なif文とfor文を紹介します。「ifは分かれ道、forはぐるぐる繰り返し」というイメージを持っておくと理解が早いです。

if文とfor文の働きの比較図。if文は条件によって進む道が分岐する分かれ道、for文は同じ処理を指定回数くり返すループ

if文(条件分岐)

if文は、「もし〜ならば、...する」という条件に応じた処理の分岐を作ります。

int score = 85;

if (score >= 80)
{
    Debug.Log("素晴らしい!");
}
else if (score >= 60)
{
    Debug.Log("合格です。");
}
else
{
    Debug.Log("もう少し頑張りましょう。");
}

for文(繰り返し)

for文は、同じ処理を指定した回数だけ繰り返します。

// 0から9まで、10回繰り返す
for (int i = 0; i < 10; i++)
{
    Debug.Log("現在のカウント: " + i);
}

例えば、たくさんの敵キャラクターを一度に生成する、といった処理に使えます。

実践:コイン集めのルールを1本のスクリプトにする

ここまでの部品——変数・関数・if・for——を全部使って、 「コインを集めてゲームクリア」 というルールを1本のスクリプトにまとめてみましょう。マリオ系のコイン、ソニックのリング、パズルゲームの星集め——ジャンルは違っても「集めて、数えて、達成したらクリア」の骨組みは同じです。

コイン集めのルールの流れ図。コインを拾うとAddCoin関数が呼ばれて枚数が1増え、if文で目標の5枚に達したか判定し、達していればゲームクリアと表示される
using UnityEngine;

public class CoinGame : MonoBehaviour
{
    [SerializeField] private int targetCount = 5; // クリアに必要なコイン数(Inspectorで調整)

    private int coinCount = 0;    // 現在のコイン数
    private bool isCleared = false; // クリア済みか?

    void Update()
    {
        // 今はスペースキーで「コインを拾った」ことにする
        // (本物の当たり判定は、のちの記事で差し替えられるようになります)
        if (Input.GetKeyDown(KeyCode.Space))
        {
            AddCoin(1);
        }
    }

    // コインを増やして、勝利判定までを担当する関数
    void AddCoin(int amount)
    {
        if (isCleared) return; // クリア後は何もしない

        coinCount = coinCount + amount;

        // for文で、集めた枚数ぶんの★ゲージを作る
        string gauge = "";
        for (int i = 0; i < coinCount; i++)
        {
            gauge = gauge + "★";
        }
        Debug.Log("コイン: " + gauge + " (" + coinCount + "/" + targetCount + ")");

        // if文で勝利判定
        if (coinCount >= targetCount)
        {
            isCleared = true;
            Debug.Log("ゲームクリア!");
        }
    }
}

空のGameObjectにアタッチして再生し、スペースキーを5回押してみてください。Consoleに★が1つずつ増えていき、5枚で「ゲームクリア!」と表示されます。

見てほしいのは、 この記事の道具が全部つながって「ゲームのルール」になっている ことです。変数coinCountが状態を覚え、関数AddCoinが処理をひとまとめにし、for文がゲージを描き、if文が勝敗を決める。今はスペースキーで代用している「拾う」の部分を本物の当たり判定に差し替えれば、そのまま実際のゲームに使えます。断片を暗記するより、この「1本のルール」の形で覚えるのが上達の近道です。

おまけ:先に知っておくと良いこと

この記事の基礎を使い始めると、いずれ次のような「その先の話」に出会います。名前だけでも知っておくと、学習の道筋が見えやすくなります。

  • たくさんのデータは「配列」や「List」でまとめる: 敵が10体いるとき、enemy1enemy2...と変数を10個作るのは大変です。複数のデータをひとつの変数でまとめて扱う 配列List という仕組みがあり、for文と組み合わせることで真価を発揮します。
  • C#とUnityを繋いでいるのがMonoBehaviour: サンプルコードに毎回登場する: MonoBehaviourの意味が分かると、StartUpdateがなぜ自動で呼ばれるのかが理解できます。MonoBehaviourの記事 で解説しています。
  • エラーと仲良くなるのが上達の近道: コードが動かないとき、闇雲に書き直すのではなくDebug.Logとエラーメッセージから原因を特定するのがプロの手順です。デバッグ手法の記事 が参考になります。

まとめ

今回は、Unityでスクリプトを書く上で最低限必要なC#の基礎を学びました。

  • 変数: データを入れておく箱。int, float, bool, stringなどが基本。
  • 関数: 処理のまとまり。voidは戻り値なし。
  • if: 条件によって処理を分ける。
  • for: 処理を繰り返す。

これらの要素は、あらゆるスクリプトの基本となります。最初は難しく感じるかもしれませんが、実際にUnityで簡単なスクリプトを書きながら使っていくうちに、自然と身についていきます。まずはこれらの基本を道具として、ゲームに簡単な動きやルールを加えてみましょう。