カメラオブジェクト
カメラはプレイヤーの目となるオブジェクトです。
基本的にゲームはキャラクターの視点になる一人称視点か、少し離れたところから自分のキャラクターを映す三人称視点のどちらかです。
今回はキャラクターの周りがよく見える三人称視点のゲームを作っていきたいと思います。
カメラの設定
現在のHierarchyビューにはMain Cameraというオブジェクトがあるのでそのオブジェクトを流用していきます。
今回作成するカメラオブジェクトのinspectorビューは以下のようになります。
今回作成するスクリプトはカメラの位置と向きを制御するCameraScriptのみです。
以下を参考にCameraScriptを作成してください。
CameraScript.csのソースコード
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CameraScript : MonoBehaviour { private const float YAngle_MIN = -89.0f; //カメラのY方向の最小角度 private const float YAngle_MAX = 89.0f; //カメラのY方向の最大角度 public Transform target; //追跡するオブジェクトのtransform public Vector3 offset; //追跡対象の中心位置調整用オフセット private Vector3 lookAt; //targetとoffsetによる注視する座標 private float distance = 10.0f; //キャラクターとカメラ間の角度 private float distance_min = 1.0f; //キャラクターとの最小距離 private float distance_max = 20.0f; //キャラクターとの最大距離 private float currentX = 0.0f; //カメラをX方向に回転させる角度 private float currentY = 0.0f; //カメラをY方向に回転させる角度 //カメラ回転用係数(値が大きいほど回転速度が上がる) private float moveX = 4.0f; //マウスドラッグによるカメラX方向回転係数 private float moveY = 2.0f; //マウスドラッグによるカメラY方向回転係数 private float moveX_QE = 2.0f; //QEキーによるカメラX方向回転係数 void Start() { } void Update() { //QとEキーでカメラ回転 if (Input.GetKey(KeyCode.Q)) { currentX += -moveX_QE; } if (Input.GetKey(KeyCode.E)) { currentX += moveX_QE; } //マウス右クリックを押しているときだけマウスの移動量に応じてカメラが回転 if (Input.GetMouseButton(1)) { currentX += Input.GetAxis("Mouse X") * moveX; currentY += Input.GetAxis("Mouse Y") * moveY; currentY = Mathf.Clamp(currentY, YAngle_MIN, YAngle_MAX); } distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel"), distance_min, distance_max); } void LateUpdate() { if (target != null) //targetが指定されるまでのエラー回避 { lookAt = target.position + offset; //注視座標はtarget位置+offsetの座標 //カメラ旋回処理 Vector3 dir = new Vector3(0, 0, -distance); Quaternion rotation = Quaternion.Euler(-currentY, currentX, 0); transform.position = lookAt + rotation * dir; //カメラの位置を変更 transform.LookAt(lookAt); //カメラをLookAtの方向に向けさせる } } } |
Targetは常に視界の中心に置きたいオブジェクトです。
つまりキャラクターをTargetに設定することでキャラクターに追従し、キャラクターの周りを旋回することができるようになります。
このスクリプトではマウスの右クリックを押しながらドラッグすることでキャラクター中心にカメラを旋回させ、マウスホイールの回転でキャラクターとの距離を調節できるようにしています。
実際にキャラクターとカメラを動かしてみましょう!
操作方法
キャラクターとの距離調整:マウスホイール
カメラ旋回:[Q]キー or [E]キー または マウス右クリック&ドラッグ
カメラがユニティちゃんを追尾していることがわかります。
ユニティちゃんを舐め回すように眺めて、気が済んだら次に行きましょう。
次回予告!
今回プレイヤーキャラクターが動くことができ、視界も動かすことができるようになりました。
空間のなかを自由に動くことができるようになりました!
ゲームらしくなってきましたね!!
次回はマルチプレイオンラインに対応させていきます。
お楽しみに!!