↑このような感じでカーソルの動きと同じようにカメラも動く
一人称視点で使えるカメラの動きをスクリプトを使って実装していく。少し階層構造が複雑なので、じっくり読んでいただきたい。
一人称視点で使えるカメラの動きをスクリプトを使って実装する
現在の状況
- X軸Z軸方向に動かせるPlayerが設置してある
- Main CameraがPlayerの子オブジェクトになっている
「Player」は動かせるようにしている。「Character Controller」を使ってオブジェクトを動かす【Unity】で動かせる。この記事の続きとして読むと非常にわかりやすくなる。
「Player」にスクリプトをアタッチ
【Player選択】→【LookXというスクリプトを追加】
「LookX」スクリプトに記述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookX : MonoBehaviour
{
[SerializeField]
private float x_sensitivity = 3f;
void Update()
{
float x_mouse = Input.GetAxis("Mouse X");
Vector3 newRotation = transform.localEulerAngles;
newRotation.y += x_mouse * x_sensitivity;
transform.localEulerAngles = newRotation;
}
}
x_sensitivityの値を変更すると、カメラの動くスピードが変更される。
このような階層構造にする
【Create Empty】→【LookYに名前を変更】→
【画像のような階層構造にする】
プレイヤーも空のオブジェクトもカメラの位置も同じ位置のほうが良い。カメラに関しては少しだけY軸方向に高いほうがプレイヤーの目線に合うこともあるので、そのあたりはあとで微調整していただきたい。
「LookY」にスクリプトをアタッチ
【LookY選択】→【LookYというスクリプトを追加】
「LookY」スクリプトを記述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookY : MonoBehaviour
{
[SerializeField]
private float y_sensitivity = 3f;
void Update()
{
float y_mouse = Input.GetAxis("Mouse Y");
Vector3 newRotation = transform.localEulerAngles;
newRotation.x -= y_mouse * y_sensitivity;
transform.localEulerAngles = newRotation;
}
}
y_sensitivityの値を変更すると、カメラの動くスピードが変更される。
実行してこんなふうになったらOK
【カーソルを動かした方向にカメラも動いたらOK
おわりに
もっと良いスクリプトがあると思う。思いついたら書くので許してほしい。
以上、一人称視点で使えるカメラの動きをスクリプトを使って実装する方法だ。
このようなチュートリアルを販売しているので、Unityでゲームを作成している人は購入していただきたい。
コメント
コメント一覧 (1件)
多分ですが、X,Yの座標計算は一つのスクリプトのみでできると思います。
こうしたらどうでしょうか?
※[SerializeField]は外しています
private float x_sensitivity = 3f;
private float y_sensitivity = 3f;
void Update()
{
float x_mouse = Input.GetAxis("Mouse X");
float y_mouse = Input.GetAxis("Mouse Y");
Vector3 newRotation = transform.localEulerAngles;
newRotation.y += x_mouse * x_sensitivity;
newRotation.x -= y_mouse * y_sensitivity;
transform.localEulerAngles = newRotation;
}