Как сделать настройку чувствительности в юнити?
как сделать ползунок изменения чувствительности в юнити? вот мой код камеры:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMovement : MonoBehaviour
{
public float sensivity;
[SerializeField] private float minY;
[SerializeField] private float maxY;
private float xRotation = 0f;
private float yRotation = 0f;
private void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
private void Update()
{
float xInput = Input.GetAxis("Mouse X") * sensivity * 600 * Time.deltaTime;
float yInput = Input.GetAxis("Mouse Y") * sensivity * 600 * Time.deltaTime;
yRotation += xInput;
xRotation -= yInput;
xRotation = Mathf.Clamp(xRotation, minY, maxY);
transform.localRotation = Quaternion.Euler(xRotation, yRotation, 0);
}
}
Ответы (1 шт):
Автор решения: Vladimir
→ Ссылка
Для редактора - RangeAttribute:
[Range(1, 100)]
public float sensivity;
Для рантайма - Slider:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CameraMovement : MonoBehaviour
{
private const float minSensitivity = 1;
private const float maxSensitivity = 100;
[Range(minSensitivity, maxSensitivity)]
public float sensitivity;
[SerializeField] private Slider slider;
[SerializeField] private float minY;
[SerializeField] private float maxY;
private float xRotation = 0f;
private float yRotation = 0f;
private void Awake()
{
slider.onValueChanged.AddListener(value =>
{
sensitivity = Mathf.Max(minSensitivity, value * maxSensitivity); // Значение, которое выдаёт слайдер, всегда в диапазоне 0-1
});
}
private void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
private void Update()
{
float xInput = Input.GetAxis("Mouse X") * sensitivity * 600 * Time.deltaTime;
float yInput = Input.GetAxis("Mouse Y") * sensitivity * 600 * Time.deltaTime;
yRotation += xInput;
xRotation -= yInput;
xRotation = Mathf.Clamp(xRotation, minY, maxY);
transform.localRotation = Quaternion.Euler(xRotation, yRotation, 0);
}
private void OnDestroy()
{
slider.onValueChanged.RemoveAllListeners();
}
}
Затем нужно создать слайдер: GameObject->UI->Slider
, и перетащить его в поле в инспекторе.
Альтернативно, вместо Awake и OnDestroy можно подписываться и отписываться в OnEnable и OnDisable.