Во время нажатия Esc камера персонажа продалжает отслеживать мышь, как сделать так что бы при открытии меню камера не двигалась?
я использовал FirstPlayerController что бы управлять передвижением и взглядом камеры, когда стал делать меню заметил что Time.timeScale = 0f не стал влиять на камеру, в коде FirstPlayerController нашел булевую переменную как cameraCanMoove логически посчитал что это остановит камеру, но теперь в консоли вот это: NullReferenceException: Object reference not set to an instance of an object MenuPause.ActivateMenu () (at Assets/1Scripts/MenuPause.cs:51) MenuPause.Update () (at Assets/1Scripts/MenuPause.cs:27)
MenuPause:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MenuPause : MonoBehaviour
{
public GameObject menuPaused;
public GameObject crosshair;
[SerializeField] KeyCode Pause;
bool isMenuPaused = false;
public FirstPersonController FPS;
void Start()
{
menuPaused.SetActive(false);
}
void Update()
{
ActivateMenu();
}
public void ActivateMenu()
{
if (Input.GetKeyDown(Pause))
{
isMenuPaused = !isMenuPaused;
}
if (isMenuPaused)
{
menuPaused.SetActive(true);
crosshair.SetActive(false);
Cursor.lockState = CursorLockMode.None;
Time.timeScale = 0f;
FPS.cameraCanMove = false;
}
else
{
menuPaused.SetActive(false);
crosshair.SetActive(true);
Cursor.lockState = CursorLockMode.Locked;
Time.timeScale = 1f;
FPS.cameraCanMove = true;
}
}
}
FirstPlayerController:
{
private Rigidbody rb;
#region Camera Movement Variables
public Camera playerCamera;
public float fov = 60f;
public bool invertCamera = false;
public bool cameraCanMove = true;
public float mouseSensitivity = 2f;
public float maxLookAngle = 50f;
// Crosshair
public bool lockCursor = true;
public bool crosshair = true;
public Sprite crosshairImage;
public Color crosshairColor = Color.white;
// Internal Variables
private float yaw = 0.0f;
private float pitch = 0.0f;
private Image crosshairObject;
private void Update()
{
#region Camera
// Control camera movement
if (cameraCanMove)
{
yaw = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * mouseSensitivity;
if (!invertCamera)
{
pitch -= mouseSensitivity * Input.GetAxis("Mouse Y");
}
else
{
// Inverted Y
pitch += mouseSensitivity * Input.GetAxis("Mouse Y");
}
// Clamp pitch between lookAngle
pitch = Mathf.Clamp(pitch, -maxLookAngle, maxLookAngle);
transform.localEulerAngles = new Vector3(0, yaw, 0);
playerCamera.transform.localEulerAngles = new Vector3(pitch, 0, 0); #region Camera Setup
EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
GUILayout.Label("Camera Setup", new GUIStyle(GUI.skin.label) { alignment = TextAnchor.MiddleCenter, fontStyle = FontStyle.Bold, fontSize = 13 }, GUILayout.ExpandWidth(true));
EditorGUILayout.Space();
fpc.playerCamera = (Camera)EditorGUILayout.ObjectField(new GUIContent("Camera", "Camera attached to the controller."), fpc.playerCamera, typeof(Camera), true);
fpc.fov = EditorGUILayout.Slider(new GUIContent("Field of View", "The camera’s view angle. Changes the player camera directly."), fpc.fov, fpc.zoomFOV, 179f);
fpc.cameraCanMove = EditorGUILayout.ToggleLeft(new GUIContent("Enable Camera Rotation", "Determines if the camera is allowed to move."), fpc.cameraCanMove);
GUI.enabled = fpc.cameraCanMove;
fpc.invertCamera = EditorGUILayout.ToggleLeft(new GUIContent("Invert Camera Rotation", "Inverts the up and down movement of the camera."), fpc.invertCamera);
fpc.mouseSensitivity = EditorGUILayout.Slider(new GUIContent("Look Sensitivity", "Determines how sensitive the mouse movement is."), fpc.mouseSensitivity, .1f, 10f);
fpc.maxLookAngle = EditorGUILayout.Slider(new GUIContent("Max Look Angle", "Determines the max and min angle the player camera is able to look."), fpc.maxLookAngle, 40, 90);
GUI.enabled = true;
fpc.lockCursor = EditorGUILayout.ToggleLeft(new GUIContent("Lock and Hide Cursor", "Turns off the cursor visibility and locks it to the middle of the screen."), fpc.lockCursor);
fpc.crosshair = EditorGUILayout.ToggleLeft(new GUIContent("Auto Crosshair", "Determines if the basic crosshair will be turned on, and sets is to the center of the screen."), fpc.crosshair);
// Only displays crosshair options if crosshair is enabled```