カメラを作成する
カメラのスクリプトを作成する
Projectビューから「Assets > MiniRpg > Scripts」フォルダを右クリックし、Scriptsフォルダの下に「TpsCamera」という名前で新しいスクリプトを追加します。
そして、以下のコードをコピーして貼り付けて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
using UnityEngine; namespace MiniRpg { public class TpsCamera : MonoBehaviour { #region [System.Serializable] class ZoomSetting { [SerializeField] float m_ZoomSpeed = 10.0f; public float ZoomSpeed { get { return m_ZoomSpeed; } } [SerializeField] float m_ViewRangeMin = 2.5f; public float ViewRangeMin { get { return m_ViewRangeMin; } } [SerializeField] float m_ViewRangeMax = 15.0f; public float ViewRangeMax { get { return m_ViewRangeMax; } } } [System.Serializable] public class RotationSetting { [SerializeField] float m_RotationSpeed = 1.0f; public float RotationSpeed { get { return m_RotationSpeed; } } [SerializeField] float m_RotationMinX = 0.0f; public float RotationMinX { get { return m_RotationMinX; } } [SerializeField] float m_RotationMaxX = 80.0f; public float RotationMaxX { get { return m_RotationMaxX; } } } #endregion [Header("Required")] [SerializeField] Transform m_Focus; [Header("Settings")] [SerializeField] ZoomSetting m_ZoomSetting = new ZoomSetting(); [SerializeField] RotationSetting m_RotationSetting = new RotationSetting(); Vector3 m_InitialPosition; Vector3 m_LatestFocusPosition; public void Initialize() { transform.position = m_InitialPosition; transform.LookAt(m_Focus.position); m_LatestFocusPosition = m_Focus.position; } void RatateAround(Transform target) { var horizontalDelta = Input.GetAxis("Mouse X"); var verticalDelta = Input.GetAxis("Mouse Y"); transform.RotateAround(target.position, Vector3.up, horizontalDelta * m_RotationSetting.RotationSpeed); transform.RotateAround(target.position, -transform.right, verticalDelta * m_RotationSetting.RotationSpeed); if (m_RotationSetting.RotationMinX <= transform.eulerAngles.x && transform.eulerAngles.x <= m_RotationSetting.RotationMaxX) return; transform.RotateAround(target.position, -transform.right, -verticalDelta * m_RotationSetting.RotationSpeed); } void Zoom(Vector3 target) { var scroll = Input.GetAxis("Mouse ScrollWheel"); var distance = Vector3.Distance(transform.position, target); transform.position += transform.forward * scroll * m_ZoomSetting.ZoomSpeed; if (m_ZoomSetting.ViewRangeMin <= distance && distance <= m_ZoomSetting.ViewRangeMax) return; transform.position -= transform.forward * scroll * m_ZoomSetting.ZoomSpeed; } void ChaseTarget() { transform.position += m_Focus.position - m_LatestFocusPosition; } void Awake() { m_InitialPosition = transform.position; Initialize(); } void Update() { ChaseTarget(); if (Input.GetMouseButton(1)) RatateAround(m_Focus); Zoom(m_Focus.position); m_LatestFocusPosition = m_Focus.position; } } } |
カメラの設定を行う
ヒエラルキから「Main Camera」を選択し、「TpsCamera」スクリプトをアタッチします。
インスペクタ上のTpsCameraの設定項目内に、Focusという項目があります。
そこに、以前作成したPlayerオブジェクトの下のCenterオブジェクトを選択して下さい。
これは、カメラの焦点となる位置です。
カメラの位置を調整する
これくらいの位置にカメラの位置を調整します。
カメラの初期位置と焦点との距離は、ZoomSettingのViewRangeMin~ViewRangeMaxの値に収まっていなければ正常に動作しません。
なお、角度は自動で調整されるので、位置を大雑把に合わせるだけで大丈夫です。
カメラの動作確認
この状態でゲームをプレイしてみましょう。こんな感じになります。
これでカメラが完成しました。
次回は、モンスターを制作していきます。
次のパートへ
次のパート:Part2-5『モンスターの移動を実装する』
コメント