Есть персонаж, который в сцене №3 берёт предмет «рычаг» (необходимый в сцене №1), на котором висит скрипт «LeverUpSave».
public class LeverUpSave : MonoBehaviour
{
bool pickedUp;
public GameObject TextLeverUp; //иконка "рычага"
void Start()
{
if (pickedUp = SaveSystem.GetBool("bool") == true)
{
TextLeverUp.SetActive (true);
}
else
{
TextLeverUp.SetActive (false);
}
}
void OnTriggerEnter (Collider other)
{
if (other.gameObject.tag == "Player")
{
pickedUp = true;
SaveSystem.SetBool("bool", pickedUp);
AudioManager.Instance.PlayAudio("Key_Lever");
TextLeverUp.SetActive (true);
Destroy(gameObject, 0.5f);
}
}
}
В следствии чего активируется иконка «рычага», данное событие сохраняется, и префаб «рычага» уничтожается. В сценах №1-2 также есть иконки «рычага» и «менеджер рычага»)) со скриптом «LeverTextGO»,
public class LeverTextGO : MonoBehaviour
{
bool pickedUp;
bool turnOn;
public GameObject TextLeverUp;
void Start()
{
if ((turnOn = SaveSystem.GetBool("bool") == true) || (pickedUp = SaveSystem.GetBool("bool") == false))
{
TextLeverUp.SetActive (false);
}
if (pickedUp = SaveSystem.GetBool("bool") == true)
{
TextLeverUp.SetActive (true);
}
}
}
благодаря которому, если персонаж взял рычаг, то иконка активна, а после того, как донёс до места и положил куда надо – должна отключаться. В сцене №1 есть триггер (точнее два, первый активирует надпись, что тут, мол, нужен «рычаг») со скриптом «LeverTurnOn»
public class LeverTurnOn : MonoBehaviour
{
bool pickedUp;
bool turnOn;
bool isGameOver;
public GameObject TextKeyUp; // иконка рычага
public GameObject TriggTextLever; // старое сообщение на UI о рычаге
public GameObject TriggLever; // старый триггер на рычаге
public GameObject Lever_GO; // старый агрегат "рычаг"
public GameObject LeverN_GO; // новый агрегат "рычаг"
public GameObject PanelFin; // панель на UI о завершении игры
public GameObject PausePenel;
void OnTriggerEnter (Collider other)
{
if (other.gameObject.tag == "Player")
{
if (pickedUp = SaveSystem.GetBool("bool") == true)
{
AudioManager.Instance.PlayAudio("Key_Lever");
TextKeyUp.SetActive (false);
TriggLever.SetActive (false);
Lever_GO.SetActive(false);
TriggTextLever.SetActive (false);
LeverN_GO.SetActive (true);
turnOn = true;
pickedUp = false;
SaveSystem.SetBool("bool", turnOn);
SaveSystem.SaveToDisk();
Debug.Log("Save leverUp to disk.");
}
if (pickedUp = SaveSystem.GetBool("bool") == false)
{
Lever_GO.SetActive(true);
TriggTextLever.SetActive(true);
LeverN_GO.SetActive(false);
}
}
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player")
{
if (pickedUp = SaveSystem.GetBool("bool") == true)
{
PausePenel.SetActive(false);
PanelFin.SetActive (true);
isGameOver = true;
Cursor.visible = true;
Time.timeScale = 0;
AudioManager.Instance.PlayAudio("PanelFinSound");
}
if (pickedUp = SaveSystem.GetBool("bool") == false)
{
PanelFin.SetActive (false);
}
}
}
}
который отключает первый триггер, отключает иконку, активирует принесённый рычаг, сохраняет это событие, а на выходе из триггера – активирует UI панель «PanelFin», с кнопками «Quit» и «Menu». Первая проблема в том, что, если перезайти в сцену 1 или 2, то иконка «рычага» опять активна – но я уже положил рычаг на место и она должна появиться (по задумке), только если я снова возьму рычаг в сцене №3. А вторая проблема в том, что я не знаю, как правильно отключить кнопку Esc (которой управляет скрипт «SumPause»), на момент активации панели «PanelFin» с кнопками «Quit» и «Menu».
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]
/// <summary>Singleton class for controlling pause functions.</summary>
public class SumPause : MonoBehaviour {
// Event managers
public delegate void PauseAction(bool paused);
public static event PauseAction pauseEvent;
public bool isGameOver;
// Variables set via inspector
[SerializeField]
bool useEvent = false, detectEscapeKey = true;
[SerializeField]
Sprite pausedSprite, playingSprite;
// Link to button's image
Image image;
static bool status = false;
/// <summary>
/// Sets/Returns current pause state (true for paused, false for normal)
/// </summary>
public static bool Status {
get { return status; }
set {
status = value;
Debug.Log("Pause status set to " + status.ToString());
OnChange();
// Change image to the proper sprite if everything is set
if (CheckLinks())
instance.image.sprite = status ? instance.pausedSprite : instance.playingSprite;
else
Debug.LogError("Links missing on SumPause component. Please check the sumPauseButton object for missing references.");
// Notify other objects of change
if (instance.useEvent && pauseEvent != null)
pauseEvent(status);
}
}
// Instance used for singleton
public static SumPause instance;
void Awake ()
{
image = GetComponent<Image>();
}
void Start ()
{
// Ensure singleton
if (SumPause.instance == null)
SumPause.instance = this;
else
Destroy(this);
}
void Update()
{
// Listen for escape key and pause if needed
if (detectEscapeKey && Input.GetKeyDown(KeyCode.Escape))
TogglePause();
}
/// <summary>
/// Flips the current pause status. Called from the attached button in
/// the inspector.
/// </summary>
public void TogglePause ()
{
Status = !Status; // Flip current status
}
/// <summary>Checks if all links are properly connected</summary>
/// <returns>False means links are missing</returns>
static bool CheckLinks () {
return (instance.image != null && instance.playingSprite != null && instance.pausedSprite != null);
}
/// <summary>This is what we want to do when the game is paused or unpaused.</summary>
static void OnChange() {
if(status) {
// What to do when paused
Time.timeScale = 0; // Set game speed to 0
Cursor.visible = true;
}
else {
// What to do when unpaused
Time.timeScale = 1; // Resume normal game speed
Cursor.visible = false;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
При компиляции файла выдает ошибку: Failed to create a assetsap_package See the Console for details
Делаю сборку CRL для SQLНеобходимо чтобы она была в режиме UNSAFE
У меня есть число допустим 12865 мне нужно его перевести в 12,865Тоесть если число больше тысячи переводить его в такой формат, но если число меньше...
не получается сделать, что бы текст находящийся в ComboBox выводился в Excel, подскажите что ещё мне нужно в код добавить? У меня получается, что:...