Добавляем чит-коды в игру

Читеров никто не любит, тем не менее, читы могут очень полезны в некоторых ситуациях. Например, для того, чтобы тестировать игру. Так, чтобы решить данный вопрос, нам понадобится небольшой скрипт, для обработки команд, которые пользователь будет вводить с текстового поля. Команда у нас будет состоять либо из одного, либо из двух слов. Допустим, в первом случаи это может быть просто слово «god», для перехода в режим бога. А во втором случаи, могут быть словосочетания, типа «money 100», то есть, добавить сто монет. Для наглядности, в нашем варианте, мы сразу реализуем возможность перехода с одной сцены на другую.

Добавляем чит-коды в игру

Особых приготовлений не нужно, кроме как, чтобы было воле ввода UI > InputField на сцене.

А далее небольшой скрипт:

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Collections;

public class Cheats : MonoBehaviour {

	public GameObject setActive; // вкл./выкл.
	public InputField inputField; // поле ввода текста

	private string key, value;
	private static bool _active;

	public static bool isActive
	{
		get{ return _active; }
	}

	void Start()
	{
		setActive.SetActive(false);
	}

	void Error()
	{
		Debug.Log(this + " невыполнимая команда.");
	}

	void Check()
	{
		if(!Input.GetKeyDown(KeyCode.Return) || !_active) return; // срабатывание по нажатию клавиши Enter, если консоль активна

		string[] tmp = inputField.text.Split(new char[]{' '});

		if(tmp.Length > 2)
		{
			Error();
			return;
		}
		else if(tmp.Length == 0)
		{
			return;
		}

		if(tmp.Length == 2)
		{
			key = tmp[0];
			value = tmp[1];
		}
		else
		{
			key = tmp[0];
			value = string.Empty;
		}

		GetCheat();
	}

	void Update()
	{
		if(Input.GetKeyDown (KeyCode.BackQuote) && !_active)
		{
			setActive.SetActive(true);
			_active = true;
		}
		else if(Input.GetKeyDown(KeyCode.BackQuote) && _active)
		{
			setActive.SetActive(false);
			_active = false;
		}

		Check();
	}

	void GetCheat()
	{
		switch(key)
		{
		case "map": // ключевое слово, чит
			if(Application.CanStreamedLevelBeLoaded(value))
			{
				Debug.Log(this + " загрузка сцены: " + value);
				SceneManager.LoadScene(value);
			}
			else
			{
				Error();
			}
			break;

		case "money":
			if(GetINT(value) > 0)
			{
				Debug.Log(this + " добавлено " + value + " золотых");
				// тут вызов функции, которая пополнит кошелек персонажа
			}
			else
			{
				Error();
			}
			break;

		default:
			Error();
			break;
		}
	}

	int GetINT(string text)
	{
		int result = 0;
		int number;
		if(int.TryParse(text, out number)) result = number;
		return result;
	}
}

Всё достаточно просто, чит для загрузки сцены уже есть, а добавить новые не составит труда.

Скачать демо проект:
Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.

Комментариев 2

Офлайн
Falcion 17 февраля 2019
Цитата: Falcion
Здравствуйте, появился вопрос, для чего нужен GetINT?

Уже понял, что он используется для, грубо говоря, распознавания числа, на которое надо будет увеличить предыдущей значение
Офлайн
Falcion 17 февраля 2019
Здравствуйте, появился вопрос, для чего нужен GetINT?
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика