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;
}
}以上です。
次回はこれの拡張をしていこうと思います。
