vamr academy Второе занятие
TRANSCRIPT
![Page 1: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/1.jpg)
1
15.10.2016ВВЕДЕНИЕ В СКРИПТИНГ НА ЯЗЫКЕ C#.
![Page 2: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/2.jpg)
2Создадим скрипт.Создадим новый файл скрипта воспользовавшисьменю Create/C# Script. (или щёлкнув в окне Project правойкнопкой мыши и выбрав Create/C# Script. После этого вамбудет предоставлена возможность выбрать имя вашего файла,пока, не задумываясь, назовите его Test, но это только пока.
Теперь вы можете видеть свой файл в окне Project
Для того, чтобы открыть свой файл для редактирования вы можетелибо 2 раза щёлкнуть на него левой кнопкой мыши в окнеProject, либо нажать кнопку Open… в окне инспектора.
Так же в окне инспектора вашего файла вы уже можете видетьавтоматически сгенерированный для вас код.
![Page 3: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/3.jpg)
3Откроем созданный скрипт.По умолчанию ваш скрипт откроется в редакторе Mono Develop,который поставляется вместе с Unity. Так же вы можете выбратьРедактором по умолчанию Visual Studio (если он у вас установлен)Через вкладку Edit/Preferences/External Tools/External Script Editor.
Теперь мы видим что именно сгенерировал для нас Unity в процессе создания скрипта.Это хороший пример для демонстрации синтаксисаКоторого мы должны будем придерживаться в процессеРазработки нашего приложения.
![Page 4: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/4.jpg)
4Рассмотрим код.Директива using в данном случае позволяет нам использовать типы данных определённых до нас другими программистами. (в пространствах имён UnityEngine и System)
Всё, что описано здесь называется классом.
Для объявления классанеобходимо указать
1. Тип доступа (public/private)
2. Ключевое слово class
3. Имя класса (которое должноСовпадать с названием файла)
4. Открывающую и закрывающую фигурную скобку для определения области вашего класса.
Внутри нашего класса Testрасположились методы.Методы предназначены дляуправления данными которымирасполагает и имеет доступнаш класс.(Start и Update – зарезервированы Unity как иряд других методов, полный список будет указан позже.)
как комментарий т.е не вмешивается в логику программы.
Так же здесь представлена Техника комментирования, всё, что находится после символов // интерпретируется
![Page 5: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/5.jpg)
5Как объявлять свои методы.Семантика (правила определения) методов следующая:спецификатор_доступа возвращаемое_значение имя (список_входных_параметров){
//Наличие фигурных скобок обязательно для определения метода они показывают
//начало и конец вашего метода и что именно будет являться вашим методом.}Пример публичного (видного всем классам) метода который пишет в консоль сообщение,у него нет возвращаемого параметра (поэтому мы пишем void), входных параметров у неготоже нет. Пусто
Ничего не возвращаемА это тогда что? И как оно работает?
![Page 6: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/6.jpg)
6Что же мы натворили?У нас есть класс Test с созданными заранее методамиStart() и Update(). И нашим собственным методомPrintMyMessage(), но если мы вернёмся в редактор, подождёмпока наш код скомпилируется и нажмем Play ничего не произойдёт (при условии что в коде нет ошибок тогда в консолиу вас появится предупреждение).
Дело в том, что Debug – это большой системный класс (почти какнаш) у которого тоже есть свои методы и Log один из них.Используя оператор точка мы обращаемся к нему и передаёмпараметр “Helo world!” (который во внутреннем представлении имеет тип string - строка)Теперь обратим внимание на конструкцию Test:MonoBehaviour.MonoBehaviour – тоже очень большой класс. Благодаря такойконструкции мы можем пользоваться методами Start и Update не задумываясь о том, как именно они работают, а просто понимая суть того, что они делают и для чего предназначены.
![Page 7: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/7.jpg)
7Вызовем нашу функцию.
Вызовем нашу функцию в методе Start()
Создадим пустой объект Test в сцене (Create/Create Empty)
Добавим скриптсозданномуобъекту как компонент.
Результат наших действий виден в консоли.
![Page 8: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/8.jpg)
8Переменные.Тип переменной Имя переменной Присваиваемое значение,
значение типа string должнобыть в двойных кавычках.Тип int объявляется без них.
Модернизируем нашу функцию
При вызове функции будемПередавать ей нашу строкуВ качестве входного параметра.
Для создания более информативных сообщений можно пользоваться оператором <+>который определён для типа string. В данном случае этот оператор склеивает определённуюнами и переданную в функцию строку message, созданную временно строку “MyInt is: ” иЗначение myInt которое неявно в данном случае тоже было приведено к типу string.
Обратите внимание что мы использовали переменную myInt не передавая её в функцию. Она была определена в глобальной области, это значит мы можем обращаться к ней в любом месте нашегокласса. Такая переменная называется глобальной.
![Page 9: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/9.jpg)
9Цикл for( ).for (счётчик = начальное_значение; счётчик < конечное_значение; операция) { }
i – этолокальнаяПеременнаяеё можно использовать только внутри функциив которой она определена ( PrintMyMessage( ) )
Сообщениенапечаталось5 раз
Обычно для выполнения цикла счётчик (если он не пригодитсяв дальнейшем) определяют в объявлении цикла. Т.е. теперьпеременную i можно использовать только внутри цикла.
В данном примере использовалась операция инкрементирования (увелечения на единицу)для значения счётчика i. Существует две разновидности этого оператора префиксная ++i ипостфиксная i++ , по сути это короткая запись выражения ( i = i + 1), но у этих записей естьразительное отличие.
Внимание задание: напишите функцию с двумя циклами которая будет печатать ваше сообщениеи номер итерации (i) вашего цикла используя разные виды функции инкрементирования. (++i, i++)
![Page 10: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/10.jpg)
10Оператор условия if ( ).if (логическое_условие) { }else { }
Модернизируем функцию так, что она будетпечатать сообщения только на чётныхитерациях. Операция % - операция взятия остатка от деления. Также здесь мы неявно сталкиваемся с новым типом данных – типом bool. Он возникает при проверке остатка от делениянашего счётчика на 2 (проверка чётности числа). Тип bool принимает всего 2 значенияtrue или false. В нашем примере переменнаяBool создастся в момент вычисления выражения(i % 2 == 0) Оператор == оператор сравнениякоторый результат которого true если (i % 2) есть 0 и false в противном случае.Так же существует оператор != попробуйтеИспользовать его вместо оператора ==.
У переменных тоже есть спецификаторыдоступа. По умолчаниюего значение private,изменим его у myIntна public. Теперь наше значениеВидно в редакторе и Мы имеем доступ к переменной и можемменять её значение.
![Page 11: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/11.jpg)
11Осталось разобраться с методом Update( ).
Попробуем напечатать сообщение в консоль в методе Update( ).
Мы видим, что сообщения печатаются после нашей функции вызванной в методе Start( ) и они продолжают печататься пока мы не остановим выполнение проекта.
Вывод: Update – это бесконечный цикл, так называемыйMain game loop, внутри которого происходит обновление наших игровых объектов и их взаимодействия
![Page 12: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/12.jpg)
12Execution order.
![Page 13: VAMR ACADEMY Второе занятие](https://reader036.vdocuments.pub/reader036/viewer/2022081503/587fc4ea1a28ab3b158b5cd3/html5/thumbnails/13.jpg)
13Camera Raycaster.
x (right)
z(forward)
y(up)Transform основнойкамеры
GwrViewerMain управляет компонентомTransform камеры основываясь на данных полученных от гироскопа вашего устройства.Мы можем использовать вектор forward какнаправление взгляда пользователя и позициюобъекта в сцене как точку из которой пользовательсмотрит на окружающие его объекты.
(0, 0, 0)
Координаты (0, 0, 0) сцены.(Начало отсчета)
Вектор Transform.position