vamr academy Второе занятие

13
15.10.2016 ВВЕДЕНИЕ В СКРИПТИНГ НА ЯЗЫКЕ C#. 1

Upload: mixarconference

Post on 19-Jan-2017

112 views

Category:

Education


4 download

TRANSCRIPT

Page 1: VAMR ACADEMY Второе занятие

1

15.10.2016ВВЕДЕНИЕ В СКРИПТИНГ НА ЯЗЫКЕ C#.

Page 2: VAMR ACADEMY Второе занятие

2Создадим скрипт.Создадим новый файл скрипта воспользовавшисьменю Create/C# Script. (или щёлкнув в окне Project правойкнопкой мыши и выбрав Create/C# Script. После этого вамбудет предоставлена возможность выбрать имя вашего файла,пока, не задумываясь, назовите его Test, но это только пока.

Теперь вы можете видеть свой файл в окне Project

Для того, чтобы открыть свой файл для редактирования вы можетелибо 2 раза щёлкнуть на него левой кнопкой мыши в окнеProject, либо нажать кнопку Open… в окне инспектора.

Так же в окне инспектора вашего файла вы уже можете видетьавтоматически сгенерированный для вас код.

Page 3: VAMR ACADEMY Второе занятие

3Откроем созданный скрипт.По умолчанию ваш скрипт откроется в редакторе Mono Develop,который поставляется вместе с Unity. Так же вы можете выбратьРедактором по умолчанию Visual Studio (если он у вас установлен)Через вкладку Edit/Preferences/External Tools/External Script Editor.

Теперь мы видим что именно сгенерировал для нас Unity в процессе создания скрипта.Это хороший пример для демонстрации синтаксисаКоторого мы должны будем придерживаться в процессеРазработки нашего приложения.

Page 4: VAMR ACADEMY Второе занятие

4Рассмотрим код.Директива using в данном случае позволяет нам использовать типы данных определённых до нас другими программистами. (в пространствах имён UnityEngine и System)

Всё, что описано здесь называется классом.

Для объявления классанеобходимо указать

1. Тип доступа (public/private)

2. Ключевое слово class

3. Имя класса (которое должноСовпадать с названием файла)

4. Открывающую и закрывающую фигурную скобку для определения области вашего класса.

Внутри нашего класса Testрасположились методы.Методы предназначены дляуправления данными которымирасполагает и имеет доступнаш класс.(Start и Update – зарезервированы Unity как иряд других методов, полный список будет указан позже.)

как комментарий т.е не вмешивается в логику программы.

Так же здесь представлена Техника комментирования, всё, что находится после символов // интерпретируется

Page 5: VAMR ACADEMY Второе занятие

5Как объявлять свои методы.Семантика (правила определения) методов следующая:спецификатор_доступа возвращаемое_значение имя (список_входных_параметров){

//Наличие фигурных скобок обязательно для определения метода они показывают

//начало и конец вашего метода и что именно будет являться вашим методом.}Пример публичного (видного всем классам) метода который пишет в консоль сообщение,у него нет возвращаемого параметра (поэтому мы пишем void), входных параметров у неготоже нет. Пусто

Ничего не возвращаемА это тогда что? И как оно работает?

Page 6: VAMR ACADEMY Второе занятие

6Что же мы натворили?У нас есть класс Test с созданными заранее методамиStart() и Update(). И нашим собственным методомPrintMyMessage(), но если мы вернёмся в редактор, подождёмпока наш код скомпилируется и нажмем Play ничего не произойдёт (при условии что в коде нет ошибок тогда в консолиу вас появится предупреждение).

Дело в том, что Debug – это большой системный класс (почти какнаш) у которого тоже есть свои методы и Log один из них.Используя оператор точка мы обращаемся к нему и передаёмпараметр “Helo world!” (который во внутреннем представлении имеет тип string - строка)Теперь обратим внимание на конструкцию Test:MonoBehaviour.MonoBehaviour – тоже очень большой класс. Благодаря такойконструкции мы можем пользоваться методами Start и Update не задумываясь о том, как именно они работают, а просто понимая суть того, что они делают и для чего предназначены.

Page 7: VAMR ACADEMY Второе занятие

7Вызовем нашу функцию.

Вызовем нашу функцию в методе Start()

Создадим пустой объект Test в сцене (Create/Create Empty)

Добавим скриптсозданномуобъекту как компонент.

Результат наших действий виден в консоли.

Page 8: VAMR ACADEMY Второе занятие

8Переменные.Тип переменной Имя переменной Присваиваемое значение,

значение типа string должнобыть в двойных кавычках.Тип int объявляется без них.

Модернизируем нашу функцию

При вызове функции будемПередавать ей нашу строкуВ качестве входного параметра.

Для создания более информативных сообщений можно пользоваться оператором <+>который определён для типа string. В данном случае этот оператор склеивает определённуюнами и переданную в функцию строку message, созданную временно строку “MyInt is: ” иЗначение myInt которое неявно в данном случае тоже было приведено к типу string.

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

Page 9: VAMR ACADEMY Второе занятие

9Цикл for( ).for (счётчик = начальное_значение; счётчик < конечное_значение; операция) { }

i – этолокальнаяПеременнаяеё можно использовать только внутри функциив которой она определена ( PrintMyMessage( ) )

Сообщениенапечаталось5 раз

Обычно для выполнения цикла счётчик (если он не пригодитсяв дальнейшем) определяют в объявлении цикла. Т.е. теперьпеременную i можно использовать только внутри цикла.

В данном примере использовалась операция инкрементирования (увелечения на единицу)для значения счётчика i. Существует две разновидности этого оператора префиксная ++i ипостфиксная i++ , по сути это короткая запись выражения ( i = i + 1), но у этих записей естьразительное отличие.

Внимание задание: напишите функцию с двумя циклами которая будет печатать ваше сообщениеи номер итерации (i) вашего цикла используя разные виды функции инкрементирования. (++i, i++)

Page 10: VAMR ACADEMY Второе занятие

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 Второе занятие

11Осталось разобраться с методом Update( ).

Попробуем напечатать сообщение в консоль в методе Update( ).

Мы видим, что сообщения печатаются после нашей функции вызванной в методе Start( ) и они продолжают печататься пока мы не остановим выполнение проекта.

Вывод: Update – это бесконечный цикл, так называемыйMain game loop, внутри которого происходит обновление наших игровых объектов и их взаимодействия

Page 12: VAMR ACADEMY Второе занятие

12Execution order.

Page 13: VAMR ACADEMY Второе занятие

13Camera Raycaster.

x (right)

z(forward)

y(up)Transform основнойкамеры

GwrViewerMain управляет компонентомTransform камеры основываясь на данных полученных от гироскопа вашего устройства.Мы можем использовать вектор forward какнаправление взгляда пользователя и позициюобъекта в сцене как точку из которой пользовательсмотрит на окружающие его объекты.

(0, 0, 0)

Координаты (0, 0, 0) сцены.(Начало отсчета)

Вектор Transform.position