Unityでゲーム開発を始めると、最初に戸惑いやすいのがC#スクリプトです。「何を書けば動くの?」「StartとUpdateは何が違うの?」「サンプルコードを貼り付けても動かない」と悩む方も少なくありません。
実際には、最初の段階ですべてのC#文法を覚える必要はありません。ゲーム制作でよく使う基本だけを理解し、少しずつ試しながら身につけていくほうが、無理なく学習を進められます。
スクリプトの基本的な使い方から、ゲーム制作でよく使うコード例、つまずきやすいポイントまで順番に確認しながら、実際に手を動かして理解を深めていきましょう。
Unity C#スクリプトで最初に覚えること
Unityでゲームを作り始めたばかりの頃は、「C#を一から勉強しなければいけない」と感じるかもしれません。しかし、最初からすべての文法や機能を覚える必要はありません。
まずは、ゲーム制作でよく使う基本を身につけることが大切です。以下の7つを理解できれば、多くの初心者向けチュートリアルを進められるようになります。
- スクリプトの作成
- GameObjectへのアタッチ
- MonoBehaviour
- Start()
- Update()
- 変数
- if文・Debug.Log()
これらは、キャラクターを動かしたり、キー入力を受け取ったり、動作を確認したりするためによく使われる基本機能です。最初は「どんな役割があるのか」を理解できれば十分で、細かい書き方を暗記する必要はありません。

次は、スクリプトを書いたのに「何も動かない」という初心者がつまずきやすい原因を確認していきましょう。
Unityでスクリプトが動かない原因
C#スクリプトを書いたのにUnity上で何も起きない場合、コードの内容よりも先に確認したい基本項目があります。特に多いのは、スクリプトを作っただけでGameObjectに設定していないケースです。
GameObjectにアタッチしていない
Unityのスクリプトは、基本的にGameObjectへアタッチして使います。Projectウィンドウにスクリプトを作成しただけでは、Scene上のオブジェクトには何も反映されません。
動かしたいCubeやPlayerなどを選択し、Inspectorにスクリプトが表示されているか確認しましょう。表示されていなければ、スクリプトをGameObjectへドラッグ&ドロップします。
ファイル名とクラス名が違う
UnityのC#スクリプトでは、ファイル名とクラス名が一致していないと正しく扱えないことがあります。たとえば、ファイル名が「PlayerMove.cs」なら、コード内のクラス名も「PlayerMove」にします。
public class PlayerMove : MonoBehaviour
{
}
スクリプト名をあとから変更した場合は、ファイル名だけでなくコード内のクラス名も同じ名前になっているか確認してください。
Consoleにエラーが残っている
Consoleに赤いエラーが出ていると、他のスクリプトも正しく動かないことがあります。再生ボタンを押す前に、Consoleウィンドウを開いてエラーが残っていないか確認しましょう。
反応しないときは、まず次の3つを順番に見ます。
- スクリプトをGameObjectにアタッチしているか
- ファイル名とクラス名が一致しているか
- Consoleに赤いエラーが出ていないか
スクリプト作成の流れを詳しく確認したい場合は、コチラの記事も参考になります。

ここまで確認できたら、次はスクリプトの中でよく使うStartとUpdateの違いを見ていきましょう。
StartとUpdateの使い分け
UnityのC#スクリプトでよく出てくるのが、Start()とUpdate()です。どちらも処理を書く場所ですが、実行されるタイミングが違います。
Startは一度だけ実行する処理
Start()は、ゲームを再生したときに一度だけ実行されます。最初の設定や、開始時に一回だけ確認したい処理を書くのに向いています。
void Start()
{
Debug.Log("ゲーム開始");
}
たとえば、初期位置の設定、最初のHPの代入、開始時のメッセージ表示などはStart()に書くと整理しやすくなります。
Updateは毎フレーム確認する処理
Update()は、ゲームが動いている間、毎フレーム実行されます。キー入力の確認、キャラクターの移動、オブジェクトの回転など、常に変化を見たい処理に向いています。
void Update()
{
Debug.Log("毎フレーム実行");
}
ただし、Update()に重い処理をたくさん書くと、ゲームの動作が重くなる原因になります。最初はあまり気にしすぎなくても大丈夫ですが、「毎フレーム実行される場所」という意識は持っておきましょう。
迷ったときの判断基準
| やりたいこと | 書く場所 |
|---|---|
| ゲーム開始時に一度だけ実行したい | Start() |
| キー入力を待ちたい | Update() |
| オブジェクトを動かし続けたい | Update() |
| 最初の数値を設定したい | Start() |
迷ったときは、「その処理は時間が進むたびに必要か?」で考えると判断しやすくなります。一度だけでよい処理はStart()、何度も確認したい処理はUpdate()に書きましょう。

処理を書く場所が分かると、次は実際によく使う基本コードを組み合わせやすくなります。
Unity初心者が使う基本コード
StartとUpdateの違いが分かったら、次はUnityでよく使う基本コードを見ていきましょう。最初は多くの構文を覚えるよりも、「何をしたいときに使うのか」を理解するほうが大切です。
Debug.Logで確認する
Debug.Log()は、Consoleに文字や数値を表示するためのコードです。ゲーム画面には表示されませんが、スクリプトが動いているか確認するときに役立ちます。
void Start()
{
Debug.Log("スクリプトが動きました");
}
たとえば、再生してもCubeが動かないときにDebug.Log()を入れると、「そもそも処理が実行されているのか」を確認できます。動きが見えない処理ほど、Consoleで確認する習慣をつけると原因を探しやすくなります。
変数で数値を管理する
変数は、数値や文字などの情報を入れておく箱のようなものです。Unityでは、移動速度、HP、スコア、残り時間などを管理するときによく使います。
int hp = 100;
float speed = 3.0f;
string playerName = "Player";
bool isGameOver = false;
数値をコードの中に直接書き続けると、あとから調整しにくくなります。移動速度のように何度も変更しそうな値は、変数にしておくと管理しやすくなります。
変数を使ってオブジェクトを動かす練習をしたい場合は、コチラの記事も参考になります。
if文で条件を分ける
if文は、「もし〇〇なら、この処理をする」という条件分岐に使います。ゲーム制作では、キーが押されたとき、HPが0になったとき、アイテムを取ったときなどに使う場面が多くあります。
int hp = 0;
void Start()
{
if (hp <= 0)
{
Debug.Log("ゲームオーバー");
}
}
if文を書くときは、条件がtrueになったときだけ中の処理が実行されます。思った通りに動かない場合は、条件の書き方が正しいか、変数の値が想定通りかを確認しましょう。
Inputでキー入力を受け取る
Input.GetKeyDown()は、指定したキーが押された瞬間を調べるコードです。スペースキーでジャンプする、Enterキーで決定する、クリックで攻撃するなど、プレイヤー操作を作るときに使います。
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Spaceキーが押されました");
}
}
キー入力は、基本的にUpdate()の中で確認します。Start()は一度しか実行されないため、キーを押すタイミングを待つ処理には向いていません。
迷ったときは、「確認するならDebug.Log」「値を持つなら変数」「条件で分けるならif文」「操作を受け取るならInput」と考えると整理しやすくなります。

次は、ここまでの基本コードを組み合わせて、SpaceキーでCubeを回転させるサンプルを作ってみましょう。
SpaceキーでCubeを回転させる
ここまで確認した基本コードを組み合わせて、Spaceキーを押したときだけCubeが回転するスクリプトを作ってみましょう。動きが分かりやすく、Start、Update、Input、if文、Debug.Log、transformをまとめて確認できます。
完成コード
Projectウィンドウで「CubeRotate」という名前のC#スクリプトを作成し、次のコードを入力します。
using UnityEngine;
public class CubeRotate : MonoBehaviour
{
void Start()
{
Debug.Log("CubeRotateが開始されました");
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
transform.Rotate(0, 45f, 0);
Debug.Log("SpaceキーでCubeを回転しました");
}
}
}
コードを書いたら保存し、Scene上のCubeにこのスクリプトをアタッチします。その後、Unityの再生ボタンを押して、Spaceキーを押してみてください。
Spaceキーを押すたびにCubeが45度回転し、Consoleにログが表示されれば正常です。
動かないときの確認
Spaceキーを押してもCubeが回転しない場合は、コードを直す前に次の項目を確認しましょう。
- CubeにCubeRotateスクリプトをアタッチしているか
- ファイル名とクラス名がどちらも「CubeRotate」になっているか
- コードを保存してからUnityに戻っているか
- Consoleに赤いエラーが出ていないか
- Unityの再生ボタンを押しているか
特に、コードを書いたあとに保存し忘れるケースはよくあります。Visual StudioやRiderなどのエディターで保存してからUnityに戻ると、スクリプトが再読み込みされます。
「押した瞬間にCubeが回転するか」「Consoleにログが出るか」を見れば、処理がどこまで動いているか判断しやすくなります。

サンプルが動いたら、数値の45fを90fに変えたり、Y軸ではなくX軸を回転させたりして、動きの違いを試してみましょう。
よくある誤解と対処
UnityのC#スクリプトは、少し動くようになると理解が進みやすくなります。一方で、最初の段階では「なんとなく動いたけれど、なぜ動いたのか分からない」という状態にもなりがちです。
ここでは、初心者が混同しやすいポイントを整理しておきましょう。
コードを暗記する必要はない
スクリプト学習で大切なのは、コードを丸暗記することではありません。どの場面で使うコードなのかを判断できるほうが、実際のゲーム制作では役立ちます。
たとえば、次のように考えると整理しやすくなります。
- 動いているか確認したい → Debug.Log
- 数値を調整したい → 変数
- 条件で処理を変えたい → if文
- キー入力を受け取りたい → Input
- オブジェクトを動かしたい → transform
エラーやログの見方を深く学びたい場合は、コチラの記事も参考になります。
Unityの基本操作やC#の基礎を体系的に学びたい場合は、こちらもおすすめです。
Unityの教科書 Unity 6完全対応版
✅ Amazonでチェックする|✅ 楽天でチェックする

ここまで理解できたら、あとは小さなサンプルを動かしながら、自分のゲームに少しずつ応用していきましょう。
まとめ
UnityのC#スクリプトは、最初から完璧に理解しようとすると難しく感じやすいです。まずは小さなコードを動かし、「どこに書くか」「いつ実行されるか」「動かないときに何を見るか」を確認しながら進めていきましょう。
SpaceキーでCubeを回転させるようなシンプルなサンプルでも、数値を変えたり条件を追加したりするだけで理解は深まります。次は自分の作りたいゲームに合わせて、移動、ジャンプ、クリック操作などへ少しずつ応用してみてください。










※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。