< 概要 >
Unityのカメラの位置や方向をキーボードやマウスで操作するスクリプトの紹介です。
一人称視点のゲーム開発や映像制作のカメラ移動などでご使用ください。
【Unity】カメラコンポーネントを動かすスクリプトの実演
スクリプト
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 |
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SocialPlatforms; public class CameraController: MonoBehaviour { // WASD:前後左右の移動 // QE:上昇・降下 // 左ドラッグ:視点の移動 //カメラの移動量 [SerializeField, Range(0.1f, 20.0f)] private float _positionStep = 5.0f; //マウス感度 [SerializeField, Range(30.0f, 300.0f)] private float _mouseSensitive = 90.0f; //カメラのtransform private Transform _camTransform; //マウスの始点 private Vector3 _startMousePos; //カメラ回転の始点情報 private Vector3 _presentCamRotation; private Vector3 _presentCamPos; void Start() { _camTransform = this.gameObject.transform; } void Update() { CameraRotationMouseControl(); //カメラの回転 マウス CameraPositionKeyControl(); //カメラのローカル移動 キー } //カメラの回転 マウス private void CameraRotationMouseControl() { /* マウスがクリックされたとき */ if (Input.GetMouseButtonDown(0)) { _startMousePos = Input.mousePosition; _presentCamRotation.x = _camTransform.transform.eulerAngles.x; _presentCamRotation.y = _camTransform.transform.eulerAngles.y; } /* マウスがクリックされている間 */ if (Input.GetMouseButton(0)) { //(移動開始座標 - マウスの現在座標) / 解像度 で正規化 float x = (_startMousePos.x - Input.mousePosition.x) / Screen.width; float y = (_startMousePos.y - Input.mousePosition.y) / Screen.height; //回転開始角度 + マウスの変化量 * マウス感度 float eulerX = _presentCamRotation.x + y * _mouseSensitive; float eulerY = _presentCamRotation.y + x * _mouseSensitive; _camTransform.rotation = Quaternion.Euler(eulerX, eulerY, 0); } } //カメラのローカル移動 キー private void CameraPositionKeyControl() { Vector3 campos = _camTransform.position; if (Input.GetKey(KeyCode.D)) { campos += _camTransform.right * Time.deltaTime * _positionStep; } if (Input.GetKey(KeyCode.A)) { campos -= _camTransform.right * Time.deltaTime * _positionStep; } if (Input.GetKey(KeyCode.E)) { campos += _camTransform.up * Time.deltaTime * _positionStep; } if (Input.GetKey(KeyCode.Q)) { campos -= _camTransform.up * Time.deltaTime * _positionStep; } if (Input.GetKey(KeyCode.W)) { campos += _camTransform.forward * Time.deltaTime * _positionStep; } if (Input.GetKey(KeyCode.S)) { campos -= _camTransform.forward * Time.deltaTime * _positionStep; } _camTransform.position = campos; } } |
使い方
上記のスクリプトをカメラコンポーネントにアタッチするだけです。
一人称視点のゲーム開発とかで使えますね!
https://amzn.to/3UcmFfn
コメント