ゲームの見え方を決めるのが、カメラとライト。キャラクターが画面の外に出ていってしまったり、シーンが暗すぎて何も見えなかったり・・・は、誰でも一度は通る道です。今回はカメラの基本の設定と、プレイヤーを追いかけるカメラの作り方、ライトで明るさや雰囲気を調整する方法をご紹介します!
この記事で学べること
- カメラの主な設定(Projection、Size、Field of View、Clipping Planes、Background Type)
- スクリプトでプレイヤーを追いかけるカメラの作り方
- ライトの種類の使い分けと、明るさ・色・影の調整
- シーン全体の明るさ(Environment Lighting)の調整
- 2Dゲームのライト(Light 2D)
- 画面が暗い・真っ黒のときの確認ポイント
前提知識
- その他のよく使うコンポーネント:CameraとLightの概要
- Start関数とUpdate関数を理解しよう:LateUpdateの説明
- オブジェクトを動かそう:位置・向き・Time.deltaTime:この記事ではPlayerMoverで動かすプレイヤーを使います
カメラの基本の設定
Main Cameraを選択して、InspectorのCameraコンポーネントを見てみましょう。
Projection:遠近感のあり・なし
- Perspective:遠くのものが小さく見える(3Dゲーム向け)
- Field of View:視野の広さ。数字を大きくすると広く映る(広角)、小さくすると望遠のようになる
- Orthographic:遠くても同じ大きさで見える(2Dゲーム向け)
- Size:画面の縦の半分に、何ユニット分を映すか。Sizeを5にすると、画面の縦に10ユニット分が映ります
Universal 2DのテンプレートではOrthographic、Universal 3DのテンプレートではPerspectiveが最初から設定されています。
Clipping Planes:映す距離の範囲
- Near:カメラからこれより近いものは映らない
- Far:カメラからこれより遠いものは映らない
広いステージの奥が途中で消えるときはFarを大きく、カメラに近いものが欠けるときはNearを小さくします。
Background Type:何も映っていない部分の背景
Environment>Background Typeで選びます。
- Skybox:空の画像(3Dのテンプレートの初期設定)
- Solid Color:単色。Backgroundで色を選ぶ(2Dゲームでよく使う)
プレイヤーを追いかけるカメラ
スクリプトで作る
「SimpleFollowCamera」という名前でスクリプトを作り、Main Cameraにアタッチします。
using UnityEngine;
public class SimpleFollowCamera : MonoBehaviour
{
[SerializeField] private Transform target; // 追いかける相手(Player)
[SerializeField] private float smoothTime = 0.2f; // 追いつくまでのおおよその時間(秒)
private Vector3 offset;
private Vector3 velocity = Vector3.zero;
void Start()
{
// 最初のカメラとプレイヤーの位置の差を覚えておく
offset = transform.position - target.position;
}
void LateUpdate()
{
// プレイヤーの位置 + 最初の差 = カメラが行きたい場所
Vector3 targetPosition = target.position + offset;
// なめらかに近づける
transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
}
}
Inspectorで、TargetにPlayerをドラッグ&ドロップして再生します。プレイヤーを動かすと、カメラが少し遅れてついてくれば成功!
スクリプトのポイント
- LateUpdateで動かす
- 6-3の記事で説明したとおり、LateUpdateは全てのUpdateが終わった後に呼ばれます
- プレイヤーがUpdateで動き終わってからカメラを動かすので、カメラがガタガタ揺れにくくなります
- offset(最初の位置の差)を保つ
- シーンで置いたカメラとプレイヤーの位置関係を、そのまま保ったまま追いかけます。カメラの角度や距離は、シーンビューで置き直すだけで変えられます
- Vector3.SmoothDamp
- 目標の位置に、ばねのようになめらかに近づけます
- smoothTimeを0にするとピッタリくっつき、大きくするとゆっくり追いかけます
ref velocityは、SmoothDampが今の速さを覚えておくための変数です。毎フレーム同じ変数を渡します
- 2Dゲームで使う場合も同じスクリプトでOKです(offsetにZの差も入るので、カメラのZ座標は-10のまま保たれます)
スライムプレイヤーをRigidbodyで動かしたら、カメラで追いかけたときにプレイヤーがカクカク震える・・・



RigidbodyのInterpolateをInterpolateにしてみてね!物理の動きとカメラの動きのタイミングがなめらかにつながるよ
本格的に作るならCinemachine
画面の端で止めたい、振り向いたときに回り込みたい、カメラを切り替えたい、といった場合は、Unity公式のCinemachineを使うと、スクリプトなしで作れます。使い方はCinemachine 3入門!プレイヤーを追いかけるカメラを作ろうで紹介しています。
ライトで明るさと雰囲気を調整する(3D)
ライトの種類は3-5の記事で紹介しました。ここでは、実際にシーンの見た目を調整する手順を中心に見ていきます。
ライトの種類の使い分け
| ライト | 使いどころ |
|---|---|
| Directional Light | 太陽や月。シーン全体を同じ向きから照らす。まずはこれ1つでOK |
| Point Light | 電球やたいまつ。周りを丸く照らす |
| Spot Light | 懐中電灯やスポットライト。円すいの形に照らす |
新しいライトは、Hierarchyで右クリック>Light>目的のライトで追加します。
Directional Lightで雰囲気を変える
- Rotation:光の向き。Xを小さく(例:10)すると、夕方のように低い位置から照らして影が長くなる
- Color:光の色。白は昼、オレンジは夕方、青っぽい色は夜のような雰囲気になる
- Intensity:光の強さ。明るすぎる・暗すぎるときはここで調整
Point Light・Spot Lightの調整
- Range:光が届く距離
- Intensity:光の強さ(Point・Spotは、Directionalより大きめの値にしないと明るく見えないことがあります)
- Spot Angle:Spot Lightの光の広がり(Spot Lightのみ)
影の設定
- ライトのShadow Type:No Shadows / Hard Shadows / Soft Shadows
- Soft Shadowsは影のふちがやわらかくなる分、少し重くなります
- 影を落としたくないオブジェクトは、Mesh RendererのCast ShadowsをOffにします
シーン全体の明るさ(Environment Lighting)
ライトが当たっていない影の部分がどれぐらい明るいかは、Environment Lightingで決まります。
- Window>Rendering>Lightingを開く
- Environmentタブを選択
- Environment Lighting>Sourceで、空の色から明るさを決めるか(Skybox)、自分で色を決めるか(Color / Gradient)を選ぶ
- Intensity Multiplierで、全体の明るさを調整する
影の部分が真っ黒すぎるときは、Intensity Multiplierを上げるか、SourceをColorにして明るめの色を選びます。
画面全体の色味をまとめて変える(Global Volume)
Universal 3DのテンプレートにはGlobal Volumeが最初から入っていて、光をにじませるBloomや、画面全体の色味の調整(ポストプロセス)が出来ます。使い方は画面全体に影響が現れるPost Processingの導入についてで紹介しています。
2Dゲームのライト(Light 2D)
Universal 2Dのテンプレートでは、2D用のライトを使います。3D用のDirectional LightなどはSprite(Sprite-Lit-Default)には効かないので注意しましょう。
- Global Light 2D:シーン全体を同じ明るさで照らす。最初から置いてあるライト
- Spot Light 2D:一部分を丸く照らす(たいまつや懐中電灯)
- Hierarchyで右クリック>Light>Spot Light 2Dで追加
夜のステージを作るときは、Global Light 2DのIntensityを下げて全体を暗くし、Spot Light 2Dで明るくしたい場所だけ照らすと雰囲気が出ます。
よくあるエラーと対処法
画面が真っ暗・暗すぎる
- 原因:Directional Lightが消えている・非表示、Intensityが0に近い、またはEnvironment Lightingが暗い
- 対処法:HierarchyにDirectional Lightがあるか確認する(ないときは右クリック>Light>Directional Lightで追加)。IntensityとEnvironment LightingのIntensity Multiplierを上げる
2Dのスプライトが真っ黒になった
- 原因:Universal 2DでGlobal Light 2Dを消してしまった、またはIntensityが0になっている
- 対処法:Hierarchyで右クリック>Light>Global Light 2Dで追加し直す、Intensityを1に戻す
Game ビューに何も映らない(背景の色だけ)
- 原因:カメラの向きが違う、映したいものがClipping Planesの範囲外、または2Dでカメラの位置がスプライトより手前にない(Z座標)
- 対処法:Main Cameraを選んでシーンビューの右下のプレビューで映っている範囲を確認する。2DならカメラのZ座標を-10にする
追いかけるカメラがガタガタ揺れる
- 原因:カメラをUpdateで動かしている、またはプレイヤーのRigidbodyのInterpolateがNone
- 対処法:カメラはLateUpdateで動かす。RigidbodyのInterpolateをInterpolateにする
NullReferenceException(SimpleFollowCamera)
- 原因:Targetを設定していない
- 対処法:InspectorのTargetにPlayerをドラッグ&ドロップする
まとめ
- 3DはPerspective(Field of View)、2DはOrthographic(Size)
- 映らないときはClipping PlanesとカメラのZ座標を確認
- 追いかけるカメラはLateUpdateとVector3.SmoothDamp。本格的にやるならCinemachine
- 雰囲気はDirectional Lightの角度・色・強さ、影の部分の明るさはEnvironment Lighting
- 2DはGlobal Light 2DとSpot Light 2D
コメント