Unity カメラ操作がしたい
前回はキャラクターの動かし方をやったので、今回はプレイヤーに追従する操作可能なカメラを実装してみます。
↓前回↓
wakagamestudio.hatenablog.jp
↓今回できること↓
スティックでカメラを操作してみる pic.twitter.com/J6yCBUT1YZ
— わかです (@wakaGameStudio) 2020年9月3日
Unity Var.2019.3.4f1
②InputManagerの設定をする
- LStickでカメラの操作をするため、Inputの設定をします。
③スクリプトの中身を書く
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraAction : MonoBehaviour { [Header("カメラが向くターゲット")] [SerializeField] private GameObject target; //ターゲット [Header("回転するスピード")] [SerializeField] private Vector2 rotateSpeed; [Header("回転できる上限")] [SerializeField] private float rotateCeiling;//回転できる上限 [Header("回転できる下限")] [SerializeField] private float rotateLower; //回転できる下限 [Header("スティックの入力制限")] [SerializeField] private float inputLimit; //スティックの入力制限 [Header("左右反転")] public bool LROpposite; //trueで反転 [Header("上下反転")] public bool UDOpposite; //trueで反転 private Vector3 beforePos; //ターゲットの前位置 private void Start() { //beforePosを初期化 beforePos = target.transform.position; } private void Update() { //ターゲットが動いた分移動 transform.position += target.transform.position - beforePos; //入力値を判定 Vector3 angle = new Vector3(Input.GetAxis("HorizontalR") * rotateSpeed.x, Input.GetAxis("VerticalR") * rotateSpeed.y, 0) * Time.deltaTime; //カメラを回転させる //横回転 if (LROpposite) { transform.RotateAround(target.transform.position, Vector3.down, angle.x); } else { transform.RotateAround(target.transform.position, Vector3.up, angle.x); } //縦回転 if (UDOpposite) { if ((transform.localEulerAngles.x <= rotateCeiling || transform.localEulerAngles.x >= 360 + rotateLower) || (Input.GetAxis("VerticalR") >= inputLimit && transform.localEulerAngles.x < 360 + rotateLower && 180 <= transform.localEulerAngles.x) || (Input.GetAxis("VerticalR") <= -inputLimit && transform.localEulerAngles.x < 180 && rotateCeiling < transform.localEulerAngles.x)) { transform.RotateAround(target.transform.position, transform.right, angle.y); } } else { if ((transform.localEulerAngles.x <= rotateCeiling || transform.localEulerAngles.x >= 360 + rotateLower) || (Input.GetAxis("VerticalR") <= -inputLimit && transform.localEulerAngles.x < 360 + rotateLower && 180 <= transform.localEulerAngles.x) || (Input.GetAxis("VerticalR") >= inputLimit && transform.localEulerAngles.x < 180 && rotateCeiling < transform.localEulerAngles.x)) { transform.RotateAround(target.transform.position, -transform.right, angle.y); } } //beforePosを更新 beforePos = target.transform.position; } }
以上です。
次回はこれの拡張をしていこうと思います。