C# Game Programming Cookbook for Unity 3D / Программирование игр на Unity 3D C#. Книга готовых решений.: 2.2.1 BaseGameController.cs

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Игровой контроллер выступает в качестве концентратора для активной игровой деятельности и в качестве места, где скрипты, которые могут быть напрямую не связаны, смогут отправлять сообщения друг другу. При распределении скриптов через игровой контроллер, они остаются независимыми, и изменение их поведения это прямой процесс изменения работы с сообщениями здесь, а не через множественные скрипты.

Arien0028 28.09.14 в 15:14

0

Основными функциями игрового контроллера являются:

Arien0028 28.09.14 в 16:14

0

1. Отслеживание состояния игры:
а. Хранение состояния игры.
б. Предоставлять функции для изменения состояния игры.
в. Изменять состояние игры, основываясь на вызовах функций, таких как EndGame(), StartGame(), или PauseGame().

Arien0028 28.09.14 в 16:19

0

2. Создание любых объектов игроков.

Arien0028 28.09.14 в 16:20

0

3. Настройка камеры (любые особенности, такие как показывать камере, за каким игроком следовать, и т.д.).

Arien0028 28.09.14 в 16:21

0

4. Связь между менеджером сеансов, менеджером пользователей, и игровыми событиями (например, счет и т.д.).

Arien0028 28.09.14 в 16:22

0

5. Обращение любых связей между сценариями, которые мы хотели бы сохранить в качестве автономных и не пришлось бы перекодировать напрямую для общения друг с другом

ilia1395 25.10.14 в 19:26

0

Игровой контроллер является ядром геймплея, где общие функции игры определены и рассмотрены, и когда текущее состояние игры проводится. Отслеживание состояния игры важно, так как некоторые элементы нам нужно будет изменить для своего поведения на основе этого. Если игра приостановлена​​, например, мы хотим, чтобы приостановился весь ввод, заморозилось игровое время, и показалось всплывающее окно. Когда игра заканчивается, нам нужно будет отключить ввод игрока и так далее. Отслеживание состояния игры является работа скрипта game controller.

ilia1395 25.10.14 в 19:34

0

Типичная игра может иметь несколько состояний, таких как
1. Игра запущена
2. Игра на паузе
3. Загрузка
4. Игра закончена

ilia1395 25.10.14 в 19:35

0

Там также может быть несколько пользовательских состояний, которые применимы к отдельным видам игр, таких как состояние для показывающий ролик или, возможно, состояние проигрывания специального аудио-клип ролика. Я рекомендую для любого игрового действия, на которое влияет как один так и несколько из ваших скриптов работать над созданием нового состояния. Таким образом, вы всегда можете иметь скрипты опирающиеся на гейм контроллер чтобы знать, как себя вести.

ilia1395 25.10.14 в 19:44

0

База игры скрипт контроллера, находится в Scripts / BASE, выглядит следующим образом:

ilia1395 25.10.14 в 19:45

0

public class BaseGameController : MonoBehavior
{
bool paused;
public GameObject explosionPrefab;
public virtual void PlayerLostLife ()
{
// deal with player life lost (update U.I. etc.)
}
public virtual void SpawnPlayer ()
{
// the player needs to be spawned
}
public virtual void Respawn ()
{
// the player is respawning
}
public virtual void StartGame()
{
// do start game functions
}
public void Explode ( Vector3 aPosition )
{
// instantiate an explosion at the position passed into this function
Instantiate( explosionPrefab,aPosition, Quaternion.identity );
}
public virtual void EnemyDestroyed( Vector3 aPosition, int pointsValue,
int hitByID )
{
// deal with enemy destroyed
}
public virtual void BossDestroyed()
{
// deal with the end of a boss battle
}
public virtual void RestartGameButtonPressed()
{
// deal with restart button (default behavior re-loads the
// currently loaded scene)
Application.LoadLevel(Application.loadedLevelName);
}
public bool Paused
{
get
{
// get paused
return paused;
}
set
{
// set paused
paused = value;
if (paused)
{
// pause time
Time.timeScale= 0f;
} else {
// unpause Unity
Time.timeScale = 1f;
}
}
}
}

Zeke0028 25.09.14 в 02:57

0
Минутку...