Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Unity. Камера движется во время паузы.

Матвей Турыгин Ученик (135), на голосовании 7 месяцев назад
Привет! Я новичок в Unity, делаю паузу в своей игре и столкнулся с проблемой: камера продолжает двигаться, когда игра поставлена на паузу.(Так же взят бесплатный ассет "FirstPersonController" ) Что делать?
Вот мой текущий код:
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Pause_menu : MonoBehaviour
{
public static bool GameIsPaused = false;

public GameObject pauseMenuUI;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (GameIsPaused)
{
Resume();
}
else
{
Pause();
}
}
}
public void Resume()
{
pauseMenuUI.SetActive(false);
Time.timeScale = 1f;
GameIsPaused = false;
}

public void Pause()
{
pauseMenuUI.SetActive(true);
Time.timeScale = 0f;
GameIsPaused = true;
}

public void LoadMenu()
{
Debug.Log("Load");
Time.timeScale = 1f;
SceneManager.LoadScene("menu");
}

public void QuitGame()
{
Debug.Log("Quit");
Application.Quit();
}
public GameObject player;

void Stop()
{
player.GetComponent().enabled = false;
// Остальной код
}

public void Play()
{
player.GetComponent().enabled = true;
// Остальной код
}
}
Дополнен 8 месяцев назад
Если не сложно, то напишите как правильно должен выглядить код.
Голосование за лучший ответ
Aboba Bobova Ученик (183) 8 месяцев назад
Возможно не уместный ответ, глянь на часть которая отвечает за движение камеры и что ты с этой частью сделал при нажатии паузы, в коде разбираться не стал.
creakdowndeadly Мастер (1079) 8 месяцев назад
Может ты отправишь нам код движения камеры, чтобы мы лучше могли понять в чем проблема. Возможно то, что камера не привязана к timeScale.
Либо код игрока, чтобы лучше разобраться что к чему.
Матвей ТурыгинУченик (135) 8 месяцев назад
Слишком большой код(( не влезет
creakdowndeadly Мастер (1079) Матвей Турыгин, тогда попробуй отключить компонент камеры, которая отвечает за движение, не знаю. Если привязана к игроку, то просто сделай отключение скрипта следования за игроком при нажатии паузы и наоборот. Я просто не знаю почему у тебя так. Я в 2Д в основном делал и не сталкивался с такой проблемой. У меня была проблема только с тем, что игрок при паузе мог дюпать пробел и набирать скорость в меню паузы, затем из выхода паузы взлетал. Решил свою проблему тем, что просто отрубал игрока от управления. Возможно у тебя тоже что-то такое. По-моему timeScale влияет не на все компоненты, я особо с ним не игрался, так как реализация у Юнити оставляет желать лучшего.
- Знаток (294) 8 месяцев назад
Сталкрафт плохая игра
Спартак Бендеров (SJBatya) Гуру (4855) 8 месяцев назад
В коде вращения камеры пропиши, если Time.timeScale > 0, то условие выполняется, и туда всё содержимое.
Ефим Арбатов Ученик (173) 8 месяцев назад
попробуй
public GameObject pauseMenuUI;
public GameObject player; // Moved this variable declaration up

private void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (GameIsPaused)
{
Resume();
}
else
{
Pause();
}
}
}

public void Resume()
{
pauseMenuUI.SetActive(false);
Time.timeScale = 1f;
GameIsPaused = false;
player.GetComponent<FirstPersonController>().enabled = true;
}

public void Pause()
{
pauseMenuUI.SetActive(true);
Time.timeScale = 0f;
GameIsPaused = true;
player.GetComponent<FirstPersonController>().enabled = false;
}

public void LoadMenu()
{
Debug.Log("Load");
Time.timeScale = 1f;
SceneManager.LoadScene("menu");
}

public void QuitGame()
{
Debug.Log("Quit");
Application.Quit();
}

public void Stop()
{
player.GetComponent<FirstPersonController>().enabled = false;
// Остальной код
}

public void Play()
{
player.GetComponent<FirstPersonController>().enabled = true;
// Остальной код
}
Ефим АрбатовУченик (173) 8 месяцев назад
И я не увидел скрипт который останавливает камеру
Ефим АрбатовУченик (173) 8 месяцев назад
И я бы посоветовал поставить в код вот это
private bool isPaused = false;
private float initialTimeScale;

void Start()
{
initialTimeScale = Time.timeScale;
}

void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
if (isPaused) Resume();
else Pause();
}
}

public void Resume()
{
isPaused = false;
pauseMenuUI.SetActive(false);
Time.timeScale = initialTimeScale;

foreach (Camera camera in cameras) camera.enabled = true;
}

void Pause()
{
isPaused = true;
pauseMenuUI.SetActive(true);
Time.timeScale = 0f;

foreach (Camera camera in cameras) camera.enabled = false;
}
Матвей Турыгин Ученик (135) Ефим Арбатов, а этот код куда
Ефим АрбатовУченик (173) 8 месяцев назад
Туда где должна быть кнопка паузы
Матвей Турыгин Ученик (135) Ефим Арбатов, Есть Дискорд?
Похожие вопросы