【初心者】将来マウス感度をUIにて後から変更できるようにしたいです。
将来マウス感度をUIにて後から変更できるようにしたいので、"変数"で変えるならどこなのか
そもそも、このスクリプトだと不可能なのか教えていただきたいです。
無知、不備等があると思いますが、よろしくお願い致します。
また、不足している情報等があれば追記いたします。
やりたいこと
一般的なゲームのようにUIにてマウス感度を変えられるようにしたいです。
ですので、マウス感度が変更できる"変数"の場所を具体的に知りたいです。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { //移動速度。Inspectorから数値を変更できる。外部のクラスからは変更できない。 [SerializeField] float moveSpeed; [Range(-75f, 0f)] [SerializeField] float cameraMaxX = -50f; //上視点 [Range(65f, 0f)] [SerializeField] float cameraMixX = 50f; //下視点 [Range(200f, 0f)] [SerializeField] float ここにマウス感度の変数を付けたいです = 0.0f; //マウス感度の変数 //Rigidbody型のplayerRidigbody変数を宣言 Rigidbody playerRigidbody; //小数型の変数を2つ宣言 float moveX, moveZ; //真偽値型の変数を2つ宣言 bool moveZpermission, moveXpermission; //マウスの動きを取得する為のfloat型変数を宣言 float mouseX,mouseY; //カメラのX回転角を取得する為のfloat型変数を宣言 float rotationXcamera; //マウスの動きを反映させる許可を決める bool mouseXpermission, mouseYpermission; //カメラの動きを制御する Transform transformCamera; //Vector3型の変数を宣言 Vector3 vec3; //最初のフレームだけ実行される処理 void Start() { //このスクリプトがアタッチされているオブジェクト(Player)のRigidbodyを取得 playerRigidbody = GetComponent<Rigidbody>(); //カメラのTransformを取得 transformCamera = Camera.main.transform; //カメラのX回転角を取得 rotationXcamera = transformCamera.localEulerAngles.x; } //Update is called once per frame //毎フレーム実行される処理 void Update() { movePermission(); } void FixedUpdate() { moveExecution(); } void movePermission() { //小数型の変数に、Horizontalで指定したキーに対して入力があった場合、度合いに応じた戻り値「-1」~「1」が割り当てられる moveX = Input.GetAxis("Horizontal"); //小数型の変数に、Verticalで指定したキーに対して入力があった場合、度合いに応じた戻り値「-1」~「1」が割り当てられる moveZ = Input.GetAxis("Vertical"); //マウスの上下移動に対して戻り値「-1」~「1」を取得 mouseX = Input.GetAxis("Mouse X"); //マウスの左右移動に対して戻り値「-1」~「1」を取得 mouseY = Input.GetAxis("Mouse Y"); //Verticalで指定したキーに対して入力があった場合 if (moveZ != 0) { //前後に移動する処理を開始する為の許可を出す moveZpermission = true; } //Horizontalで指定したキーに対して入力があった場合 if (moveX != 0) { //左右に移動する処理を開始する為の許可を出す moveXpermission = true; } if (mouseX != 0) { //左右に回転する処理を開始する為の許可を出す mouseXpermission = true; } if (mouseY != 0) { //上下に回転する処理を開始する為の許可を出す mouseYpermission = true; } } void moveExecution() { //前後もしくは左右に移動する処理開始の許可が出たら、{}内の処理を実行する if (moveZpermission || moveXpermission || mouseXpermission || mouseYpermission) { //キー入力が無い時まで{}内の処理が呼ばれないよう、不許可に戻しておく moveZpermission = false; moveXpermission = false; mouseXpermission = false; mouseYpermission = false; //Vector3型変数のX成分とZ成分にキー入力の度合いを取得した変数の値を割り当てる vec3 = new Vector3(moveX, 0, moveZ); //このスクリプトがアタッチされているオブジェクト(Player)の向きを基準としたX方向とZ方向に移動するよう、 //1フレームの変化量に対応させてplayerRigidbodyの速度を上書きする //回転移動防止の為、インスペクターからFreezeRotation X Y Z にチェックを入れておく //magnitudeが1以上(斜め移動)の時だけnormalizedでmagnitudeを1にすることで if (vec3.magnitude > 1) { //これだけだとちょっとずつ動けない※normalizedによってmagnitudeが常に1になる為 playerRigidbody.velocity = transform.rotation * vec3.normalized * moveSpeed * Time.deltaTime * 100; } else { //magnitudeが1未満の場合はnormalizedで正規化はしない playerRigidbody.velocity = transform.rotation * vec3 * moveSpeed * Time.deltaTime * 100; } //移動量確認用 //Debug.Log(playerRigidbody.velocity.magnitude); //マウスの左右移動に応じてプレイヤーのRigidbodyのY軸を回転 playerRigidbody.MoveRotation(Quaternion.Euler(0.0f, playerRigidbody.rotation.eulerAngles.y + mouseX * Time.deltaTime * 100.0f, 0.0f)); //マウスの上下移動に応じてカメラのX回転角の値を決める。+-方向40度までに制限をかける。 rotationXcamera = Mathf.Clamp(rotationXcamera - mouseY * Time.deltaTime * 100.0f, cameraMaxX, cameraMixX); //カメラのX回転角を設定 transformCamera.localEulerAngles = new Vector3(rotationXcamera, 0, 0); } else { //移動許可が出ていない時は力を加えないようにリセットする playerRigidbody.velocity = Vector3.zero; } } }
試したこと
- //マウスの左右移動に応じてプレイヤーのRigidbodyのY軸を回転の()内の値を色々といじくったのですが、すごい動きになってしまいました。
- 「unity マウス感度」「unity マウス感度実装」等で検索して色々と試して見ましたが、上記のようにすごい動きになってしまいました。
補足情報
┗このサイト内のスクリプトを少しいじったものです
- リストUnity 2020.3.24f1
あなたの回答
tips
プレビュー