C# Game Programming Cookbook for Unity 3D / Программирование игр на Unity 3D C#. Книга готовых решений.: 1.1.2 Связь скриптов
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Важная часть наших управляюще- и компонентно-основанных структур это как наши скрипты будут leral 26.09.14 в 00:54 Важная часть нашей управляющей и компонентной основы это то как наши скрипты будут взаимодействовать друг с другом. Неизбежно то, что нам по требуется получать доступ к нашим скриптам из множества других частей игры, а это значит, мы должны предоставить интерфейсы с наибольшей эффективностью. Есть несколько различных способов взаимодействия Zeke0028 26.09.14 в 03:21 |
|
|
1. Прямые ссылающиеся управляющие скрипты через переменные, заданные в редакторе окна Инспектора. leral 26.09.14 в 01:01 1. Прямые ссылки на переменные управляющих скриптов, изменяемые в редакторе окна Инспектора. Zeke0028 26.09.14 в 03:26 |
||
|
Самый простой способ, чтобы ваши скрипты общались друг с другом, это иметь прямые ссылки к ним в форме публичных переменных в классе. Они заполняются в Unity редакторе с прямой ссылкой на другой скрипт. leral 26.09.14 в 01:47 Самый простой способ, чтобы ваши скрипты общались друг с другом, это иметь прямые ссылки к ним в форме публичных переменных в классе. В Unity редакторе задается ссылка на другой скрипт. Zeke0028 26.09.14 в 03:33 |
||
|
public void aScript otherScript; Zeke0028 25.09.14 в 02:58 |
||
|
В редакторе, Инспекторе будет видно поле otherScript. На это поле перетаскивается,объект содержащий скрипт, с который мы хотим связаться. А в классе, вызываем функцию этой переменой, например, Zeke0028 26.09.14 в 03:41 |
||
|
otherScript.DoSomething(); Zeke0028 25.09.14 в 02:59 |
||
|
2 Сообщение GameObject с помощью SendMessage. Zeke0028 27.09.14 в 02:01 |
||
|
SomeGameObject.SendMessage("DoSomething"); Zeke0028 25.09.14 в 02:59 |
||
|
SendMessage может также принимать несколько параметров, так бы из передача не вызывала ошибки, того что нет приемника, то есть, нет функции в скрипте, прикрепленному к GameObject с именем, совпадающим с в вызовом SendMessage. (SendMessageOptions). Вы также можете передать один параметр в выбранной функции так же, как если вы просто обычно вызывали функцию, на пример Zeke0028 27.09.14 в 04:00 |
||
|
SomeGameObject.SendMessage("AddScore",2); Zeke0028 25.09.14 в 02:59 |
||
|
3. Статические переменные. Zeke0028 27.09.14 в 09:45 |
||
|
private static GameController aController; Zeke0028 25.09.14 в 02:59 |
||
|
Хотя статические переменные видны во всей программе, вы можете их делать частные и публичные. Все становится немного сложнее, когда вы пытаетесь понять разницу между частной и публичной статической переменой. Мне повезло иметь друзей в Twitter, которые смогли объяснить все это для меня, так что позвольте мне передать, что мне сказали: Zeke0028 27.09.14 в 10:27 |
||
|
Публичная статическая переменная Zeke0028 27.09.14 в 10:51 |
||
|
1 В нашем скрипте gamecontroller.cs контролирующему игру, мы создали открытую статическую переменую: Zeke0028 27.09.14 в 10:58 |
||
|
public static GameController gateway; Zeke0028 25.09.14 в 02:59 |
||
|
2 Когда игровой контроллер (gamecontroller.cs) запускает функцию Start (), она сохраняет ссылку на себя в публичной статической переменной, как это: Zeke0028 27.09.14 в 11:07 |
||
|
gateway = this; Zeke0028 25.09.14 в 02:59 |
||
|
3 Из любова другова класса, мы можем теперь получить доступ в игровой контроллер, ссылаясь на его типа а потом на статическую переменную (GameController.gateway), вот так Zeke0028 27.09.14 в 11:15 |
||
|
GameController.gateway.GotBanana(); Zeke0028 25.09.14 в 02:59 |
||
|
Частная статическая переменная Zeke0028 27.09.14 в 11:21 |
||
|
В качестве рабочего примера, попробуйте представить себе, что скрипт с название player.cs непосредственно управляет объектами игроков в вашей игре. Все они должны сообщать скрипту менеджеру игроков, когда что-то случится, так мы объявляем менеджера игроков как статическою переменной в нашей скрипте player.cs, как то так: Zeke0028 27.09.14 в 11:27 |
||
|
private static PlayerManager playerManager; Zeke0028 25.09.14 в 03:00 |
||
|
Объект PlayerManager должен быть создан только один раз, для всех экземпляров класса игрока, чтобы быть его можно было использовать для объектов этого класса. Все player.cs скрипты смогут иметь доступ к этому экземпляру PlayerManager. Zeke0028 27.09.14 в 11:34 |
||
|
4 Дизайн шаблон Singleton Zeke0028 27.09.14 в 11:40 |
||
|
Singletonis стандартный шаблон проектирования, который позволяет создавать только один объект определенного класса. Эта модель идеально подходит для игровых скриптов, которым, придется общаться по всему коду игры. Обратите внимание, что мы будем предоставлять статический ссылку на скрипт, точно так же, как мы делали в методе "Статические переменные» ранее в этом разделе, но в реализации класса Singletonis, мы будем добавлять дополнительный код, чтобы убедиться, что только один экземпляр нашего скрипта мог быть создан. Zeke0028 27.09.14 в 11:45 |
