Skip to content

こまったときは ​

うまく動かないときに見るページです。ゲーム作りでは、うまくいかないのがふつうです。あわてずに、1つずつ確認していきましょう。

まずはこの3つ

  1. Console(コンソール)ウィンドウに赤い文字が出ていないか見る
  2. ▶(Play)を止めてから直す
  3. 直したら Ctrl+S(Macは Cmd+S)で保存する

さくいん ​

こんなときは見るところ
Console に赤い文字が出る/▶ が押せないコンパイルエラー
NullReferenceException / UnassignedReferenceExceptionつなぎ忘れ
弾が敵をすりぬける当たり判定が起きない
キーを押しても動かない・撃てない入力が効かない
モデルがピンク色モデルがピンク色になる
Play 中に変えた数字が戻ったPlay 中に変えた値が戻る
プレハブを直したのに変わらないプレハブの変更が反映されない
画面が真っ暗・何も見えないシーンが真っ暗・見えない
日本語が □□□ になるTextMeshPro の日本語が □ になる
ボタンを押してもシーンが変わらないBuild Profiles にシーンがない
音が鳴らない音が鳴らない

コンパイルエラーの読み方 ​

スクリプトにまちがいがあると、Console に 赤い文字 が出ます。これを コンパイルエラー といいます。コンパイルエラーがあると ▶ を押してもゲームが始まりません。

エラーの読み方 ​

赤い文字は、たとえばこんな形をしています。

text
Assets/_Game/Scripts/PlayerController.cs(15,10): error CS1002: ; expected
部分意味
PlayerController.csまちがいがあるファイル
(15,10)15行目の、左から10文字目あたり
CS1002エラーの種類の番号
; expected「; がありません」という意味

TIP

赤い文字を ダブルクリック すると、エディタでまちがいのある行が開きます。 エラーの場所は「書いてある行」か「その1つ上の行」のことが多いです。

TIP

エラーがたくさん出ていても、いちばん上のエラー から直しましょう。1つ直すと、ほかのエラーも一緒に消えることがよくあります。

よくあるコンパイルエラー ​

原因よく出るメッセージ直し方
ファイル名とクラス名がちがうNo MonoBehaviour scripts in the file, or their names do not match the file name / The referenced script ... is missingpublic class ○○ の ○○ とファイル名を 完全に同じ にする
セミコロン ; 忘れ; expected(CS1002)文の終わりに ; をつける
大文字・小文字のまちがいThe name 'transform' does not exist / 'Vector3' could not be found など(CS0103, CS0246)Update と update、Vector3 と vector3 は別物。お手本と1文字ずつ見比べる
波かっこ { } の数が合わない} expected(CS1513)、Type or namespace definition, or end-of-file expected(CS1022){ と } が同じ数あるか数える。エディタで { にカーソルを置くと、対になる } が光る
using の書き忘れThe type or namespace name 'InputAction' could not be found(CS0246)ファイルの一番上に using UnityEngine.InputSystem; などを書く
float に f がないCannot implicitly convert type 'double' to 'float'(CS0664)0.5 ではなく 0.5f と書く

ファイル名とクラス名

スクリプトを作ったあとにファイル名を変えると、中の public class ○○ は変わりません。名前を変えたいときは、両方 を同じ名前に直しましょう。

NullReferenceException と UnassignedReferenceException ​

▶ を押したあとに、こんな赤い文字が出ることがあります。

text
UnassignedReferenceException: The variable bulletPrefab of PlayerShooter has not been assigned.
NullReferenceException: Object reference not set to an instance of an object

どちらも「中身が空っぽのものを使おうとした」という意味です。いちばん多い原因は Inspector でのつなぎ忘れ です。

確認すること直し方
Inspector の欄が None になっていないかProject や Hierarchy から、正しいものをドラッグしてつなぐ
プレハブを直したのに、シーンのほうがつながっていないシーンに置いたオブジェクトの Inspector も確認する
GameManager.instance が空シーンに GameManager オブジェクトがあり、GameManager スクリプトが付いているか
CameraShake.instance が空Main Camera に CameraShake が付いているか(第19回)
GetComponent<○○>() が空そのオブジェクトに ○○ コンポーネントが本当に付いているか
FindAction("名前") が空アクション名のつづり(入力が効かない を見る)

TIP

UnassignedReferenceException のメッセージには、どのスクリプトのどの変数か が書いてあります(上の例なら PlayerShooter の bulletPrefab)。その名前を Inspector でさがしましょう。

当たり判定が起きない ​

弾が敵をすりぬける、自機が敵にぶつかってもやられない、というときは、次の表を上から順に確認します。

確認すること正しい状態
Rigidbodyぶつかる どちらか(この教材では動くもの全部)に付いている。Is Kinematic ON、Use Gravity OFF
Collider親オブジェクトに Box / Sphere / Capsule Collider が付いている
Is TriggerCollider の Is Trigger が ON
Tag敵は Enemy、敵の弾は EnemyBullet、自機は Player。親オブジェクト に付いているか
Z座標自機・弾・敵の Position Z がすべて 0 になっているか
Collider の大きさScene ビューで緑の線を見る。小さすぎたり、ずれていたりしないか
関数名OnTriggerEnter(Collider other) のつづり。OnTriggerEnter2D や OnCollisionEnter になっていないか

2D 用と3D 用をまぜない

この教材は 3D 物理 を使います。Rigidbody 2D や Box Collider 2D を付けると当たりません。名前に「2D」がつかないほうを使いましょう。

入力が効かない ​

原因直し方
InputSystem_Actions の Save Asset を押し忘れたInputSystem_Actions を開いて、上の Save Asset を押す(Auto-Save に✓を入れておくと自動で保存される)
アクション名のつづりがちがうコードの FindAction("Attack") と、InputSystem_Actions のアクション名が 大文字・小文字まで同じ か
PowerUp アクションを作るマップがちがうPlayer マップの中に作る(第14回)
バインドがないAttack に Keyboard の Z と Space が追加されているか(第5回)
Active Input Handling の設定Edit > Project Settings > Player > Other Settings の Active Input Handling が Input System Package (New) か Both になっているか。変えると Unity の再起動が必要
Game ビューをクリックしていない▶ を押したあと、Game ビューを1回クリックしてからキーを押す

モデルがピンク色になる ​

モデルがピンク(むらさき)色になるのは、マテリアルのシェーダーが URP に対応していない ときです。

方法1: まとめて変換する ​

  1. Window > Rendering > Render Pipeline Converter を開く
  2. 上のプルダウンで Built-in to URP を選ぶ
  3. Material Upgrade に✓を入れる
  4. Initialize Converters を押す
  5. Convert Assets を押す

方法2: 1つずつ直す ​

  1. Project でピンクになっているマテリアルを選ぶ
  2. Inspector の Shader を Universal Render Pipeline/Lit にする
  3. 色が白くなったら、Base Map の色をもう一度設定する

TIP

パーティクルがピンクのときは、マテリアルの Shader を Universal Render Pipeline/Particles/Unlit にします。

Play 中に変えた値が戻る ​

▶ を押している間(Play 中)に Inspector で変えた値は、Play を止めると元に戻ります。これは Unity のしくみです。

  • Play 中は「お試し」と考えましょう。いい値が見つかったら、数字をメモ してから Play を止め、もう一度入力します
  • Play 中は画面の色が少し変わります。設定を変える前に、Play 中でないか確認するくせをつけましょう

TIP

Edit > Preferences > Colors の Playmode tint を目立つ色にすると、Play 中かどうかがすぐわかります。

プレハブの変更が反映されない ​

シーンに置いたプレハブを Inspector で直しても、プレハブ本体(Project にあるもの)は変わりません。弾や敵のように Instantiate で出すものは、プレハブ本体が使われるので、変更が反映されないように見えます。

やり方手順
シーンでの変更をプレハブに送るHierarchy でオブジェクトを選び、Inspector 上の Overrides → Apply All
プレハブを直接直すProject でプレハブをダブルクリックして開き、直してから <(左上の矢印)で戻る

WARNING

Inspector の Bullet Prefab などの欄には、Project にあるプレハブ をつなぎます。Hierarchy にあるオブジェクトをつなぐと、それを消したときに弾が出なくなります。

シーンが真っ暗・見えない ​

確認すること正しい状態
カメラの位置Main Camera の Position が (0, 0, -10)、Rotation が (0, 0, 0)
ProjectionOrthographic
Size5(小さすぎると拡大されすぎ、大きすぎると小さく見える)
オブジェクトの位置Z が 0。X が −8.9〜8.9、Y が −5〜5 の範囲にあるか
オブジェクトの大きさScale が 0 になっていないか、小さすぎないか
ライトDirectional Light があり、オフ(✓なし)になっていないか
チェックボックスInspector の名前の左の✓が外れていないか(非アクティブ)
Game ビューと Scene ビューScene ビューでは見えても、Game ビューはカメラに写るものだけ

TIP

Hierarchy でオブジェクトをダブルクリック(または選んで F キー)すると、Scene ビューでそのオブジェクトの場所に移動できます。

TextMeshPro の日本語が □ になる ​

TextMeshPro は最初、英語の文字しか入っていないフォント を使っています。そのため日本語は □(とうふ)になります。

方法1: 英語で書く(おすすめ) ​

SCORE、LIFE、GAME OVER、START のように英語にすれば、このままで大丈夫です。この教材も英語表記を使っています。

方法2: 日本語フォントアセットを作る ​

  1. 日本語フォントファイル(例: Noto Sans JP。ライセンスを確認する)を Project に入れる
  2. Window > TextMeshPro > Font Asset Creator を開く
  3. Source Font File にフォントをドラッグする
  4. Character Set を Custom Characters にして、使う文字だけを入力する(または Characters from File で文字の一覧ファイルを指定)
  5. Atlas Resolution を大きめ(例: 4096 x 4096)にする
  6. Generate Font Atlas → Save で保存する
  7. テキストの Font Asset に、できたフォントアセットをつなぐ

先生へ

日本語フォントアセットは、先生が1つ作って配るとスムーズです。常用漢字すべてを入れるとファイルが大きくなるので、使う文字だけにするのがおすすめです。

Build Profiles にシーンがない ​

タイトルの START ボタンを押してもゲームが始まらない、Console に次のような文字が出る、というときです。

text
Scene 'Game' couldn't be loaded because it has not been added to the active build profile
  1. File > Build Profiles を開く
  2. Scene List に Title と Game があるか確認する
  3. なければ、Project からシーンをドラッグして入れる(または Add Open Scenes)
  4. Title が 0番、Game が 1番 になるように並べる

コードの SceneManager.LoadScene("Game") の名前と、シーンファイルの名前が同じかも確認しましょう。

音が鳴らない ​

確認すること直し方
AudioClip がつながっているかInspector の Shot Sound などが None になっていないか
AudioSource があるかPlayOneShot を使うオブジェクト(Player)に AudioSource が付いているか
VolumeAudioSource の Volume が 0 になっていないか
Game ビューのミュートGame ビュー上の Mute Audio(スピーカーのボタン)がオンになっていないか
Audio ListenerMain Camera に Audio Listener が付いているか(ふつうは最初から付いている)
BGMAudioSource の Play On Awake と Loop が ON か
パソコンの音量パソコン本体の音量やイヤホンの接続

それでもわからないときは ​

  • スクリプト完成版一覧 と自分のコードを1行ずつ見比べる
  • エラーの文字をそのまま先生に見せる(スクリーンショットや、Console の文字をコピーする)
  • 1つ前の回の状態にもどしてやり直す(先生に聞いてください)