Unity のよくある質問
Unity の公式フォーラムでスレッドが山ほど立つ質問を 47 件、ここで最後まで答えます。どれも、詳しい版がどこにあるかを示します — 手順ならガイド、コースの一段階ならレッスンです。
キャラクターを移動させるには?
3 つのうち 1 つだけ選び、2 つ同時に使わないこと。直接操るプレイヤーには CharacterController、物理に押させたいものには Rigidbody、衝突しないものだけに transform.Translate。すべての速度に Time.deltaTime を掛けなければ、速い機械ほどゲームが速く進みます。
ガイド · 17.09.2026キャラクターを動かす:3 通りのうちどれが自分向きか8 分 →キャラクターをジャンプさせ、空中での再ジャンプを止めるには?
ジャンプ自体は 1 行。難しいのは「足が何かに付いている瞬間」を知ることです。キャラクターの真下にある小さな球を Ground 層に対して検査し、それが true を返したときだけジャンプを許可します。垂直速度が 0 かどうかで判定するのは絶対にやめてください——放物線の頂点でも 0 になるからです。
ガイド · 17.09.2026ジャンプと、それを成立させる接地判定9 分 →オブジェクトを回転させるとは? Quaternion とは?
欲しい角度が決まっていれば Quaternion.Euler(x, y, z)、何かの方を向かせたいなら Quaternion.LookRotation に RotateTowards や Slerp を組み合わせます。transform.rotation に直接足し算してはいけません——そこは角度ではない 4 つの数が保存されており、角度を書けば意味のない結果になります。
ガイド · 17.09.2026回転:オイラー角、Quaternion、触っていいのはどちらか11 分 →カメラをガタつかずプレイヤーに追従させるには?
カメラは LateUpdate で動かし、Update では動かさないこと。LateUpdate は他のすべてが動き終わった後に走るため、カメラは確定済みの位置を読めます。プレイヤーが Rigidbody を使っているなら、Rigidbody の Interpolate を有効化してください——物理はフレームとは違う周期で進みます。
ガイド · 17.09.2026カクつかない追従カメラ8 分 →プレイヤーが何を目指し、何に乗っているか判定するには?
Physics.Raycast は見えない線を送り、最初に出会った collider をヒット地点・距離・面法線つきで報告します。LayerMask と最大距離は必ず渡してください——これがないとレイはすべての層を無限先まで検査し、三人称カメラから撃ったレイは手前に立つプレイヤー自身に当たります。
ガイド · 17.09.2026レイキャスト:目の前にあるものを世界に尋ねる10 分 →コードでオブジェクトを生成するには?
生成するものを Prefab にし、public フィールドに参照を持たせ、Instantiate(prefab, position, rotation) を呼びます。Prefab は Project パネルからそのフィールドへドラッグすること——Hierarchy に置いたインスタンスをドラッグするのが、スポナー系バグの半分を生んでいます。
ガイド · 17.09.2026Instantiate:Prefab の生成と再利用9 分 →時間かけて処理する、または待ってから実行するには?
コルーチンは一時停止できるメソッドです。yield return new WaitForSeconds(1f) は 1 秒待ち、同じ行から再開します。StartCoroutine で起動し、停止したくなったら使えるようハンドルを保管し、そしてコルーチンを実行中の GameObject が無効化・破棄されると止まることを覚えておいてください。
ガイド · 17.09.2026コルーチン:Update なしで時間かけて処理する10 分 →UI をあらゆる画面サイズに合わせるには?
Canvas Scaler を Scale With Screen Size にして基準解像度を指定し、各要素を中心に置くのではなく所属する角や辺にアンカーします。ノッチのあるスマホでは、全画面の親を Screen.safeArea に収め、重要なものが切り欠きに入らないようにします。
ガイド · 17.09.2026あらゆる画面に合う UI(ノッチ込み)11 分 →プレイヤーの進捗を保存するには?
わずかな設定には PlayerPrefs、本当のゲーム状態には Application.persistentDataPath 配下の JSON ファイルを使います。ファイル書き込みは OnApplicationQuit だけでなく OnApplicationPause でも行うこと——スマホでは Quit はまず走りません。
ガイド · 17.09.2026進捗の保存:PlayerPrefs、JSON、それぞれの使いどころ9 分 →APK をビルドして Android 実機に入れるには?
Android Build Support モジュールを入れ、プラットフォームを Android に切り替え、自分専用のパッケージ名を設定してビルドします。初めてのビルドで多くがつまずくのは、Unity が SDK や JDK のパスを見つけられないこと。後になって効いてくるのが、既定の com.DefaultCompany をそのまま公開してしまうことで、一度 Google Play に載せるとパッケージ名は二度と変えられません。
ガイド · 17.09.2026デスクトップのプロジェクトから実機の APK へ10 分 →なぜキャラクターが床を突き抜けて落ちるの?
確認すべき順に 4 つ。床に Collider がない。どちらかの Collider で Is Trigger にチェックが入っている。1 ステップの移動量が大きすぎて薄い床——Plane は必ず薄い——を飛び越えてしまう。二つの層が Collision Matrix で相互にオフになっている。CharacterController ならもう一つあり、Move() ではなく transform.position で動かすと衝突を完全に無視します。
レッスン最初のシーン:平らな 3D の床基礎 →NullReferenceException とはどういう意味?
空の変数を使ったということです。Console の赤い行をダブルクリックすると例外を投げた行が開くので、その行でドットの左にある何か null になっていないか見てください。定番の原因は、誰も何もドラッグしていない Inspector のスロット——None と表示され、null として振る舞います。
レッスンclass = コンポーネント基礎 →なぜ public 変数が Inspector に表示されないの?
まず Console を確認してください。プロジェクト内に一つでもコンパイルエラーがある限り、Unity は最後にコンパイル成功した版を動かしているため、つい今追加したフィールドはまだ動いている版に入っていません。そうでなければ、クラス名がファイル名と完全一致していないか、その型が Unity のシリアライズ対象外——Dictionary、インターフェース、get/set 付きプロパティ——です。
レッスンclass = コンポーネント基礎 →なぜ OnTriggerEnter が呼ばれないの?
次の 4 つがすべて真である必要があります。二つのうち片方に Rigidbody がある。二つの collider の片方で Is Trigger にチェックがある。メソッド名がちょうど OnTriggerEnter で Collider を引数に取る。二つの層が Collision Matrix で相互に有効になっている。最初の条件の例外が CharacterController で、Move() で動かす限り Rigidbody がなくても trigger メッセージを発火します。
ガイド · 20.09.2026衝突とトリガー:なぜイベントが発火しないのか9 分 →別のシーンに切り替えるには?
すべてのシーンを File > Build Profiles の Scene List に追加し、シーン名つきで SceneManager.LoadScene を呼びます。切り替えは次のフレームで起こり、古いシーンのすべては破棄され、DontDestroyOnLoad を付けたルートオブジェクトだけが生き残ります——static フィールドや Time.timeScale も同上で、誰もリセットしてくれません。
ガイド · 20.09.2026シーン切替:LoadScene、ローディング画面、そして生き残るもの10 分 →シングルトンとは? GameManager の書き方は?
シングルトンとは、生存中の一つのオブジェクトを指す static フィールドを備えた形です。これでどのスクリプトも参照を持たずに GameManager.Instance を呼べます。Awake で代入し、Start で読み、シーン再読込で入ってくる二体目を破棄し、マネージャーが本当にシーンより長生きすべきときだけ DontDestroyOnLoad を呼びます。
ガイド · 20.09.2026シングルトン:ゲーム全体が届く一つの GameManager9 分 →Unity における Prefab とは?
Prefab は Project パネルにファイルとして保存された GameObject のことです。シーン内のコピーはそれに従うので、ファイルを編集すると全部が一括で変わります。コピー側を編集すると、そのコピーだけの override として記録され——太字で表示され、Overrides ドロップダウンの Apply All と Revert All で扱えます。
ガイド · 20.09.2026Prefab:ファイル、コピー、その間の変更8 分 →「アプリをインストールできませんでした」と出るのはなぜ?
たいていは署名の衝突です。同じパッケージ名が、別の debug key で作ったビルドとして既に入っています。adb uninstall com.yourstudio.yourgame で消してから入れ直してください。端末内のセーブデータも旧版と一緒に消えます。
ガイド · 22.09.2026APK がインストールできない:エラー文別に全原因を解説11 分 →「パッケージを解析できません」はどういう意味?
インストーラーが APK を一切読めていない、ということです。転送で切れたか改名された、.aab を .apk に変えた、Minimum API Level が端末を超えている、ARM64 専用ビルドを 32-bit 機に入れた——のいずれかです。まず PC 上のファイルとバイト数を比べてください。10 秒で終わります。
ガイド · 22.09.2026APK がインストールできない:エラー文別に全原因を解説11 分 →Unity のゲームが Android で起動直後に落ちるのはなぜ?
adb logcat -s Unity を実行してからゲームを起動してください。原因は数秒で出力され、ファイル名と行番号を伴うスタックトレースは自分の C# の側の意味です——たいてい Build Profiles に載っていない scene か、Inspector で未設定の参照。Unity の行が全く出ないなら、Managed Stripping Level を Minimal で再ビルドしてください。reflection からしか辿れない型を IL2CPP が消した可能性があります。
ガイド · 22.09.2026APK がインストールできない:エラー文別に全原因を解説11 分 →なぜ Android だと黒画面で、エディタでは正常なの?
スマホは Build Scenes の index 0 にある scene から起動し、エディタで開いているものは無視されるからです。しかも一覧に無い scene はビルドに同梱されず、LoadScene はログ 1 行だけ残して失敗します。レンダー設定を触る前に一覧を確認し、adb logcat に答えを名乗らせましょう。
ガイド · 22.09.2026エディタでは動くのにスマホだと黒画面になる12 分 →画面は黒いのにゲームの音は聞こえる。これは何?
ロジックは生きていて映像だけが欠けているので、描くものがないカメラか、全部を覆った UI のどちらかです。Canvas のチェックを外して 1 回ビルドし、ワールドが見えれば UI が犯人。それでも変わらないなら Clear Flags を Solid Color にして派手な背景色で再ビルド——ピンクなら視界が空、黒ならその scene に有効なカメラがありません。
ガイド · 22.09.2026エディタでは動くのにスマホだと黒画面になる12 分 →実機では黒ではなくマテリアルがピンクになる。同じ問題?
同じ系列ですが故障地点が違います。ピンクはそのファイルにこのプラットフォーム向け subshader が無く、Unity がエラー用マテリアルを描いている状態。黒は shader が受理され、必要だったバリアントが削られたかドライバに拒否された状態です。マテリアルを触る前に Auto Graphics API を切って、Vulkan なしの OpenGLES3 で試してください。
ガイド · 22.09.2026エディタでは動くのにスマホだと黒画面になる12 分 →Unity の CharacterController が動かない。どこから始める?
入力を 1 秒に 1 回 log する暫定スクリプトを 1 つ貼って、Play 中に W を押してみてください。数値が出るなら入力は正常で、犯人はたいてい 0 のままの speed です(public float speed; に既定値は無いから)。数値が出ないならスクリプトが走っていません——オブジェクト無効、コンポーネントのチェック外れ、あるいは Input.GetAxis を呼ぶコードに対してプロジェクトが新しい Input System を使っている場合です。
ガイド · 22.09.2026CharacterController が動かない:安い順に七つの確認12 分 →キャラクターがほとんど動かないほど遅いのはなぜ?
形は二つです。6 の代わりに 0.001(毎秒 1 ミリ)、または deltaTime を掛ける代わりに割るか完全に省いている場合。Move() はこのフレームのメートル数を受け取る所以、毎秒メートルの速度には Time.deltaTime を掛けます。deltaTime を省くと同じキャラがフレームレート依存になり、120 Hz のスマホでは二倍速です。
ガイド · 22.09.2026CharacterController が動かない:安い順に七つの確認12 分 →キャラクターは回転するのに前に進まない。なぜ?
回転はスケールを無視しますが、前進はしません。その Transform と全ての親のスケールを確認してください。いずれかの軸が 0、あるいは反転の負値だと CharacterController のカプセルから体積が消え、スケールされたルートは計算が続いてほしい場所で Move を止めます。Unity はその Transform を 1, 1, 1 に置く想定で、モデルの大きさは importer の Model タブで設定します。
ガイド · 22.09.2026CharacterController が動かない:安い順に七つの確認12 分 →Unity を学んでゲームを作るまでどれくらい?
このコースは 40 レッスン・合計 447 分=7.45 時間です。章末の 5 つの練習課題を課題文どおりに行うと(60〜90 分、続いて 3〜4、2〜3、3〜4、3〜5 時間)、実際の合計は 18〜23 時間。30 分で 35〜46 回ぶんなので、毎日学べば 1〜2 か月です。
ガイド · 22.09.2026Unity を学ぶのにどれくらい?コース実測の数字11 分 →1 日 30 分で Unity は学べる?
1 レッスン分としては足ります。平均は 447 ÷ 40 = 11.2 分、レッスンだけで 447 ÷ 30 = 14.9 回です。毎日なら約 2 週間、週 5 回なら 3 週間。練習課題を足すと同じ計算で 35〜46 回になります。
ガイド · 22.09.2026Unity を学ぶのにどれくらい?コース実測の数字11 分 →自分のゲームを作って公開するまでどれくらい?
カリキュラムの数字では答えられません。Unity よりスコープの質問だからです。このコースが言える一番近い線は:タブ 02 とタブ 05 の練習課題が教えること——移動、3 スキル、追ってきて反撃する敵、APK——だけを再利用する 2 つ目のゲームなら 6〜9 時間、しかもアートが既にある場合だけです。
ガイド · 22.09.2026Unity を学ぶのにどれくらい?コース実測の数字11 分 →Unity は本当に無料?無料版はただの体験版?
お試しではなく正式プランなので、期限もクレジットカードも不要で、商用ゲームの公開もできます。条件は直近 12 か月の収益と資金が 20 万ドル以下であること、そして Pro ライセンス無しではコンソール向けにビルドできないことです。
ガイド · 22.09.2026Unity は無料?無料プランの中身を全部見る11 分 →Unity は今もインストール課金(Runtime Fee)を取っていますか?
いいえ。Unity は 2024 年 9 月 12 日に Runtime Fee を廃止しました。即時適用で、どのゲームにも課金されず、課金はシート単位のサブスクリプションに戻っています。インストール単位の課金を警告する投稿は、すべてその日前に書かれたものです。
ガイド · 22.09.2026Unity は無料?無料プランの中身を全部見る11 分 →実際に Unity Pro が必要になるのはいつ?
組織の直近 12 か月の収益と資金が 20 万ドルを超えたとき、または Switch、PlayStation、Xbox、Vision Pro の空間アプリといったクローズドなプラットフォームに出す必要があるときです。Unity を学ぶことと最初のゲームを出すことは、その条件に入りません。
ガイド · 22.09.2026Unity は無料?無料プランの中身を全部見る11 分 →Unity でゲームを作るのに、先に C# を覚える必要はある?
いいえ、ただし少しは要ります。最初のタブでは変数・メソッド・クラス・if/for/List を短い 4 課で扱います —— これが最初のゲームが必要とする量そのものです。残りは Unity の話で、自分が作っているプロジェクトの中で覚えていきます。
ガイド · 22.09.2026Unity で 3D ゲームを作る:5 ステージ・1 プロジェクト11 分 →最初の Unity ゲームはどのくらいの時間かかる?
このコースの 40 課は案内どおり進めて約 7 時間半。本当に作り切るまでの正直な倍率は 2〜3 倍で、余る時間はビルドとフレームレート、あなたのプロジェクト固有の部分に使われます。週末 1 回で遊べるアリーナはできますが、スマホのゲームになるのは 5 ステージを最後まで行ったときです。
ガイド · 22.09.2026Unity で 3D ゲームを作る:5 ステージ・1 プロジェクト11 分 →チュートリアルを積み増すのと、1 つを作り切るのではどちらが良い?
チュートリアルはゲームの途中までを教えて、リリースできるかを決める部分 —— ビルド設定、実機、フレームレート —— の手前で止まります。それらは自分のプロジェクトにしか存在しないので、10 本見るとゲームはいくつでも始められ、ひとつも終わりません。
ガイド · 22.09.2026Unity で 3D ゲームを作る:5 ステージ・1 プロジェクト11 分 →Animator を付けたのにアニメーションが再生されません。なぜ?
止めている原因は三つ、この順に確かめます。まず GameObject に Animator コンポーネントがあり、その Controller の枠に asset が入っていること — 空欄だと何も再生されず、エラーも出ません。次にクリップが Controller の中の state になっていて、どれか一つがオレンジ色の既定 state であること。Project ウィンドウに置いてあるだけのクリップは決して再生されません。最後に既定 state から出る transition に、コードが実際に設定する条件が付いていること。SetTrigger("Attack") を呼ぶなら、パラメータの綴りは Attack、型は Trigger、そして transition がそれを使っていなければなりません。ゲームを動かしたまま Animator ウィンドウを開くと、再生中の state が光ります。三つのどれが欠けているかはそれで分かります。
レッスンAnimator のステートマシンキャラクターと戦闘 →敵にプレイヤーを追わせて攻撃させるには?
距離を一度測れば状態が決まり、状態が振る舞いを決めます。索敵範囲より遠ければ待機、その内側なら近づき、腕の届く距離に入ればクールダウンに従って攻撃する。測る前に方向ベクトルの Y を潰してください。そうしないとブロックの上に立ったプレイヤーが遠くにいると読まれます。障害物のあるアリーナなら、自分で transform を動かすのではなく NavMeshAgent と SetDestination を使います。agent はブロックを回り込みますが、直線はブロックに突っ込んだまま止まります。
レッスン追ってきて反撃する敵キャラクターと戦闘 →クールダウン付きのスキルシステムはどう作る?
スキルはスクリプトではなくデータとして持ちます。ScriptableObject にクールダウン、ダメージ、射程、アイコン、アニメーションのトリガー、エフェクトの prefab を入れ、発動側のスクリプトはスキルと「次に使える時刻」の辞書を一つ持つだけにします。発動の処理はこうなります — Time.time が保存した時刻を過ぎたか、過ぎていればアニメーションを再生し、エフェクトを出し、ダメージを与え、Time.time にクールダウンを足して保存する。毎フレーム減らすカウントダウン変数ではなく Time.time を使ってください。数値は一つ、ずれず、オブジェクトを無効にしても正しいままです。
レッスンクールダウンつきスキルシステムキャラクターと戦闘 →弾をたくさん撃つとカクつきます。どう直す?
カクつきの原因は弾ではなく Instantiate と Destroy です。Destroy のたびにガベージコレクタ向けのゴミが残り、コレクタが動くとフレーム全体が止まります。代わりに使い回しましょう。Awake で弾のリストを一度だけ作って無効にしておき、撃つたびに無効な一発を取り出して位置を合わせ、有効にする。何かに当たったら Destroy ではなく無効に戻す。数は固定、再生中の確保はゼロ、引っかかりは消えます。
レッスン弾、ダメージ、エフェクトキャラクターと戦闘 →新しい Input System は Input.GetKey と何が違う?
古い方は毎フレーム直接ハードウェアに尋ねるので、デバイスごとにコードの分岐が増え、キー再設定の画面はほぼ作れません。新しい方は間に asset を一枚挟みます。Move や Jump という action を宣言し、キーボード・ゲームパッド・タッチをそれぞれその action に割り当て、コードは action だけを読む。後からゲームパッドを足すのは asset の編集であって、キャラクターのスクリプトの編集ではなくなります。Package Manager から入れ、移行中は Active Input Handling を Both にして、action を一つずつ移してください。
レッスン新しい Input Systemカメラと入力 →モバイル用のバーチャルスティックとボタンはどう作る?
操作の経路を二本にしてはいけません。画面上のスティックがキーボードと同じ input action を押すようにすれば、キャラクターのスクリプトはタッチの存在を最後まで知らずに済みます。スティックは Image 二枚 — 台と摘み — に、摘みの中心からのずれを長さ 1 以下のベクトルに変えるドラッグ処理を足したものです。操作系はまるごと Screen Space Overlay の Canvas に入れ、各コントロールを自分の角にアンカーし、ノッチのある端末ではセーフエリアを守ってください。
レッスンタッチ操作とジョイスティックカメラと入力 →Cinemachine は必要?それとも自作の追従カメラで足りる?
キャラクターを追うだけなら自作で足ります。そして一度は書く価値があります。カメラがなぜ LateUpdate に属するのかが分かるからです。Cinemachine が効いてくるのはその次の段階 — 軸ごとの減衰、小さな動きでカメラを動かさないためのデッドゾーン、壁を抜けないようにする衝突、カットシーンや照準モードのためのカメラ間のブレンド。自分で書けば数週間、設定するだけなら半日です。学んでいる間は自作を持ち、二台目のカメラが要るときに乗り換えてください。
レッスンCinemachine とカメラの揺れカメラと入力 →地形とライトを足したらシーンが真っ暗になりました。どう直す?
何かを変えた後で暗くなるのは、ほぼ必ずライティングのデータが古いせいで、ライトが間違っているせいではありません。Window から Rendering、Lighting と開いて Generate Lighting を押してください。Static が付いているものは、そうするまでベイクしたときの光を持ち続けます。あと三つ確認します。Directional Light が有効で、地平線と平行ではなく斜め下を向いていること。skybox が Environment に割り当たったままであること。そして Ambient が黒に設定されていないこと。一部のオブジェクトだけ暗いなら、それらは static で、ライトのない状態でベイクされています。
レッスンライティングとスカイボックス世界とゲームループ →エディタでは滑らかなのに実機でフレームが落ちます。なぜ?
エディタはデスクトップの GPU で動き、発熱の制限もありません。スマートフォンにはそのどちらもありません。何かを変える前に測ってください。development build を作り、USB で profiler をつなぎ、フレームが CPU 側で詰まっているのか GPU 側なのかを見ます。よくある四つは、material がばらばらで増えた draw call、誰もその大きさで見ていないのに 2048 で取り込まれた texture、ライト二つ以上からのリアルタイム影、そして切り忘れた post-processing です。毎秒 60 フレームの予算とは、すべてを 16 ミリ秒で終えるということ。手当たり次第に削るのではなく、どこに使うかを決めてください。
レッスンモバイルの性能予算モバイルへ書き出す →音を位置から鳴らし、音量を一か所でまとめて調整するには?
音が位置を持つのは、AudioSource の Spatial Blend を 2D から 3D に動かしたときです。2D のままだとどこでも同じ音量で鳴り、足音がカメラについてくるように聞こえるのはそのためです。rolloff の距離を、納得できる範囲で減衰するように設定してください。音量の方は、一つずつ手で設定してはいけません。音楽・効果音・UI のグループを持つ AudioMixer を作り、すべての source をどれかのグループに通し、各グループの音量をパラメータとして expose します。そうすれば設定画面のスライダー一本がカテゴリ全体を動かし、一時停止中のミュートも一行で済みます。
レッスン音と雰囲気世界とゲームループ →Unity のプロジェクトで、何をコミットして何を無視すべき?
Assets/、ProjectSettings/、そしてすべての .meta ファイルをコミットします。.meta は各 asset の id を持っていて、これが無いと次のマシンで参照が missing script になります。無視するのは Library/、Temp/、obj/、Build/、Logs/ — Unity が作り直せて、容量はギガ単位、しかもマシンごとに違うからです。誰かが clone する前に、Version Control を Visible Meta Files に、Asset Serialization を Force Text にしておいてください。そうしないとシーンはバイナリのままで、diff では一生読めません。
ガイド · 24.09.2026Unity のための Git:何をコミットし、何を無視するか10 分 →取り込んだモデルが極端に小さい・回転している・真っ白なのはなぜ?
食い違いが三つ別々にあるだけで、どれも Transform ではなく importer 側で直します。極端に小さい・大きいのは単位の問題。Model タブの Convert Units にチェックを入れるか、Blender のファイルなら Scale Factor を 100 にします。うつ伏せなのは Blender が Z を上とし Unity が Y を上とするため。Bake Axis Conversion にチェックを入れるか、書き出す前に Blender で回転を apply してください。真っ白なのは FBX が画像ではなく material の名前しか運ばないからです。texture をプロジェクトに入れてから Extract Materials を押し、枠を埋めます。鮮やかなピンクはまた別の話で、こちらは shader が見つかっていない状態 — たいていは URP のプロジェクトに Built-in の material が入っています。
ガイド · 24.09.20263D モデルの取り込み:スケール、回転、消えた texture9 分 →