タイトル: スクリプトの作成と実行
SEOタイトル: Unity C# スクリプト作成・実行完全ガイド
| この記事の要点 |
|
Unity スクリプトの基本
Unity のゲームロジックは C# スクリプトとして記述し、ゲームオブジェクト(GameObject)にコンポーネントとして追加することで動作させます。スクリプト 1 つが「振る舞い 1 つ」を表す設計です。
STEP1: 新規スクリプトを作成
Project ウィンドウ(通常は画面下部)で右クリック → Create → C# Script を選択します。

命名規則のポイント:
- パスカルケース(先頭大文字)が Unity の慣例。例:
PlayerController,EnemyAI,GameManager - ファイル名 = クラス名でなければならない。後から変更する場合はクラス名も同時に変える必要がある
- スペース・日本語・記号を入れない(コンパイルエラーの原因)
- 用途が明確に分かる名前を付ける(
Script1等は避ける)
STEP2: スクリプトの初期構造
作成直後のスクリプトは以下のような骨組みになっています:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log("PlayerController スタート");
}
// Update is called once per frame
void Update()
{
// 毎フレーム呼ばれる
}
}
| 要素 | 意味 |
|---|---|
MonoBehaviour | Unity のスクリプト基底クラス。これを継承するクラスは GameObject にアタッチ可能 |
Start() | シーン読み込み後、Update より前に 1 回だけ呼ばれる |
Update() | 毎フレーム呼ばれる。FPS が 60 なら 1 秒に 60 回 |
FixedUpdate() | 物理演算用。固定間隔(既定 0.02 秒)で呼ばれる |
Awake() | Start よりも前、GameObject 生成時に呼ばれる |
STEP3: Visual Studio でコードを編集
スクリプトをダブルクリックすると Visual Studio(Windows)/ Visual Studio for Mac / Rider などが起動します。IntelliSense(自動補完)で快適に編集できます。

Visual Studio が起動しない場合は、Unity の Edit → Preferences → External Tools → External Script Editor で IDE を指定します。
STEP4: GameObject にアタッチ
スクリプトを実際に動かすには、Hierarchy 内の GameObject にアタッチする必要があります。方法は以下のいずれか:
- Project ウィンドウからスクリプトをドラッグして GameObject にドロップ
- GameObject を選択 → Inspector の下部にある 「Add Component」 → スクリプト名で検索
- メニューバー → Component → Scripts → 該当スクリプト

STEP5: public 変数で Inspector 公開
クラスのpublic フィールドは自動的に Inspector に表示され、プログラムを書き換えずにエディタ上で値を調整できます。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Inspector に表示される
public float moveSpeed = 5.0f;
public int playerHp = 100;
public string playerName = "Hero";
public GameObject bulletPrefab; // プレハブもドラッグ&ドロップで設定
// private は表示されない([SerializeField] を付けると表示)
[SerializeField] private float jumpPower = 7.0f;
// 完全に非表示にしたい場合
[HideInInspector] public int secretValue;
void Update()
{
// 水平方向の入力(A/D キー、矢印キー、ゲームパッド)
float horizontal = Input.GetAxis("Horizontal");
// Translate で移動(Time.deltaTime でフレームレート非依存)
transform.Translate(Vector3.right * horizontal * moveSpeed * Time.deltaTime);
// スペースキーでログ
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("ジャンプ! Power = " + jumpPower);
}
}
}
STEP6: Play モードで実行
画面上部中央の▶(Play)ボタンをクリックすると、シーンが実行されます。Game ウィンドウで動作確認しながら、Console ウィンドウで Debug.Log() 出力を確認できます。

| ボタン | 動作 |
|---|---|
| ▶ Play | シーンを実行 / 停止 |
| ⏸ Pause | 実行を一時停止(変数を Inspector で確認できる) |
| ⏭ Step | 1 フレームだけ進める(バグ調査に便利) |
重要: Play モード中に Inspector で変更した値は、Play 停止時にすべて元に戻ります。永続化したい変更は必ず Play 停止後に行いましょう。
Debug.Log の使い方
// 通常ログ
Debug.Log("こんにちは");
// 警告(黄色)
Debug.LogWarning("注意: HP が少ない");
// エラー(赤)
Debug.LogError("敵が出現しなかった");
// 変数を含めて出力
Debug.Log($"HP: {playerHp}, Position: {transform.position}");
// 条件付きログ(リリースビルドで自動的に削除)
[System.Diagnostics.Conditional("UNITY_EDITOR")]
void EditorOnlyLog(string msg) { Debug.Log(msg); }
よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| スクリプトが動かない | GameObject にアタッチしていない | ドラッグ&ドロップで追加 |
Can't add script | ファイル名とクラス名が不一致 | 名前を揃える |
| Inspector に変数が出ない | private のまま | public か [SerializeField] |
| 動きがフレームレートで変わる | Time.deltaTime 未使用 | 移動量に * Time.deltaTime |
| NullReferenceException | 未参照のフィールド使用 | Awake / Start で GetComponent 等 |
FAQ
Q: スクリプトの名前を変えたい
A: Project でファイル名を変更したら、ファイル内のクラス名も同じ名前に書き換える必要があります。
Q: 1 つのスクリプトを複数の GameObject にアタッチできる?
A: できます。それぞれが独立したインスタンスとして動作し、Inspector の値も個別に持ちます。
Q: Start と Awake の使い分けは?
A: Awake は GameObject 生成直後、Start はその後の最初のフレームの直前。他オブジェクト参照の初期化は Start が安全です。