Контрольные точки / чекпоинты

Лучше всего, когда в игре можно сохраняться, нажав определенную клавишу. Быстрое сохранение и загрузка, удобства и все дела. Но, всё чаще в современных играх используются контрольные точки, которые создают для игрока дополнительные сложности и накручивают время прохождения. Весело, правда же? Тем не менее, игры бывают разные и в некоторых из них, система сохранений из чекпоинтов, будет в самый раз. Чекпоинты могут сохранять данные сразу в файл, либо просто временно хранить их в памяти. И сегодня в нашем примере, реализуем второй вариант.

Важное примечание. Объект / персонаж, которым вы управляете, должен иметь компоненты: Collider и Rigidbody. А так-же тег Player или любой другой, главное не забудьте изменить его и в самом скрипте тоже.



И так, создаем С# скрипт Respawn, он собственно будет отвечать за возвращение героя и хранить необходимые данные. Начнем кстати с них, нам нужно сохранить координаты с последней контрольной точки:

public static Vector3 playerPosition;

Скрипт должен знать, игрок мертв или нет:

public static bool playerDead;

Ну и сам персонаж, плюс вектор смещения. Например, игрок появляется чуть выше, заданных координат и падает на поверхность. Это нужно, чтобы не "провалиться" в графику:

public Transform player;
public Vector3 offset;

Во время старта сцены, объект отсутствует?

void Start () 
{
	playerDead = false;
}

Функция воскрешения, с небольшой задержкой:

void Spawn()
{
	StartCoroutine(Wait());	
}

IEnumerator Wait()
{
	// что-то перед Instantiate
	yield return new WaitForSeconds(2);
	Instantiate(player, playerPosition + offset, Quaternion.identity);
}

И отслеживаем изменение переменной:

void Update ()
{
	if(playerDead)
	{
		playerDead = false;
		Spawn();
	}
}

Готово!

Кстати говоря, в этот скрипт можно добавить функцию сохранения в файл, если нужно.

Продолжим. Чекпоинт делаем из обычного куба, Collider надо переключить в режим триггера ну и выключить Mesh Renderer само-собой. На куб прицепить вот такой простенький скрипт Checkpoint:

using UnityEngine;
using System.Collections;

public class Checkpoint : MonoBehaviour {
	
	void OnTriggerEnter(Collider tr)
	{
		if(tr.transform.CompareTag("Player"))
		{
			Respawn.playerPosition = tr.transform.position;
		}
	}
}

Если игрок заходит в триггер, то сохраняются его текущие координаты.

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

Офлайн
Ничего не работает скрипт бесполезный
При перезагрузке сцены игрок появляется там же где и был а не там где чекпоинт которого я поставил
Ошибок нету все сделал на игроке стоиттег Плеер есть колайдер и ригидбади 2д
не выходит ничего
Офлайн
Light 15 июня 2017
Давуд Ахмедов, нужно читать внимательно. Там написано, что хранит данные в памяти. Так же, как это делали в старых игрушках и некоторых современных тоже.
Офлайн
Light,
а как подключить сохранение в файл?
Офлайн
Light 17 июня 2017
Давуд Ахмедов, на сайте есть куча примеров, как сохранять в файл.
Офлайн
Light,
скрипт то у меня есть но как это подключить?
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика