Menu
CoddyTech

オービットカメラ

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 46/63。

ある点の周りを回るには、角度を保持し、固定オフセットをその角度だけ回転させて、結果を点に加えます。ベクトルに回転を掛けると回転できます。Quaternion.Euler(0, angle, 0) * offsetはオフセットをy軸の周りに回転させ、長さと高さは変わりません。このカメラは、常に高さ3ユニット、距離6ユニットの位置から、毎秒20度の速さで像の周りを回ります。

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

角度が0のとき、オフセットは(0, 3, -6)なので、カメラは像の後ろにあります。90のときは(-6, 3, 0)となり像の-x側に、180のときは(0, 3, 6)となり前方に位置します。カメラを動かしても向きは変わらないため、LookAtによって新しい位置から像の方を向かせます。

オイラー角の場合と同じように、角度は独自のフィールドに保持されます。ジャンプすることなく360を超えて増やしたり、0未満に減らしたりでき、上限・下限を設定したり、キーボードから変更したりできます。これをLateUpdate()で行うと、そのフレームで像やプレイヤーが移動した後にカメラが配置されます。

challenge icon

チャレンジ

中級

プレイヤーがカメラを塔の周りで動かせるようにします。カメラは常に塔の位置からdistance(8)単位離れ、塔の方を向きます。スクリプトではyawとpitchに2つの角度を保持します。

  • yawはカメラが塔の周りをどれだけ回り込んだかを表します。右矢印で増加し、左矢印で減少します。速度は1秒あたりturnSpeed(90)度です。yawが0のときカメラは塔の-z側にあり、yawが90のときは-x側にあります。
  • pitchは、塔から見てカメラが塔の高さより何度上にあるかを表します。上矢印で増加し、下矢印で減少します。速度は1秒あたりtiltSpeed(45)度で、10から60の範囲に保たれます。

開始時のyawは0、pitchは30です。このときカメラは塔の位置より4単位上、塔の後方6.93単位の位置にあります。Playを押して周りを動かし、その後Checkを押してください。

自分で試してみよう

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // 矢印キーでyawとpitchを変更する。
    }

    void LateUpdate()
    {
        // カメラをtargetの周りに配置し、targetの方を向ける。
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン