Unity3d движение объекта. Управление игровыми объектами (GameObjects) с помощью компонентов. Обращение к другим объектам

dobe Flash Томилова Елена Анатольевна

Лекция 8 . Программирование во Flash

План

Введение

Для придания интерактивности роликам, Flash имеет внутренний язык сценариев ActionScript .

ActionScript — это язык программирования, посредством которого во Flash осуществляется отправка команд и запросов о временных зависимостях, видеоклипах, кнопках и других объектах.

Язык ActionScript создан на основе стандарта ЕСМА-262, который, в свою очередь, составлен на базе языка JavaScript . По сути, ActionScript является разновидностью JavaScript , адаптированного и оптимизированного для работы в среде Flash .

Очень часто с помощью ActionScript можно легко достичь целей, которые в противном случае представляли бы собой труднодостижимую или, вообще, невозможную задачу. Без ActionScript можно реализовать только малую часть возможностей Flash. Например, ActionScript необходим для реализации любого рода интерактивности, например отклика после щелчка пользователем кнопкой мыши или нажатия клавиши на клавиатуре. Кроме того, ActionScript является единственным способом реализации перехода к определенному кадру временной шкалы либо начала или остановки воспроизведения видеоклипа. Однако эти простые примеры не раскрывают богатство, гибкость и бесконечность возможностей, которые ActionScript открывает перед разработчиками, использующими среду Flash . Язык ActionScript для Flash является "родным", и без хотя бы минимального овладения им вы будете подобны человеку, который пребывает в чужой стране и вынужден общаться с помощью жестикуляции. В этом случае придется довольствоваться меньшим по сравнению с тем, что в действительности вы хотели бы получить.

Как правило, при использовании ActionScript удается получить SWF-файлы меньших размеров и с лучшим качеством, чем при создании промежуточных отображений. Еще одним преимуществом является то, что различные задачи удается выполнять с большей точностью, например, перемещать видеоклип в точно заданное место рабочей области.

Чтобы использовать действия ActionScript , вам не нужно быть программистом. Безусловно, при создании сложных сценариев опыт программирования окажется полезным. Однако при написании сценариев ActionScript предыдущий опыт не является обязательным. Для выбора действий и связывания их с объектами фильма создатели Flash предусмотрели простой и понятный интерфейс — панель Actions. С помощью данной панели вы получаете доступ к библиотеке команд ActionScript), что позволяет вам значительно экономить время при вводе кода сценариев.

Таким образом, ActionScript — это объектно-ориентированный язык программирования, являющийся родным для среды Flash . В данном контексте термин объектно-ориентированный означает, что сценарии связываются с объектами или элементами фильма. Если во время воспроизведения фильма эти объекты принимают сообщение об определенном событии, их сценарии (или действия) выполняются. Например:

on(press){

gotoAn d Play("nextStop")

В этом сценарии при наступлении события щелчка мыши press головка воспроизведения перейдет к кадру с меткой nextStop и воспроизведение продолжится с этого места. Другими словами, событие вызывает действие, которое изменяет порядок воспроизведения фильма.

Связь между событиями и действиями является главной особенностью объектно-ориентированного программирования. Если у вас нет опыта написания сценариев либо вы совсем незнакомы с программированием, такие формулировки могут вас несколько смутить. Однако не стоит впадать в унынье. Как только вы познакомитесь с действиями, синтаксис и структура языка ActionScript станут для вас менее загадочными.

С помощью языка ActionScript можно

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

В версии Adobe Flash 9.0 (CS3) основным языком программирования является ActionScript 3.0 , однако он достаточно сложен для изучения на начальном этапе и мы не будем его рассматривать.

Вместе с тем поддерживается и старый «простой» вариант — язык ActionScript 2.0 , который и будем использовать.

Запомните, что при создании новых FLA-файлов нужно всегда выбирать тип документа Flash File (ActionScript 2.0) .

Программа на ActionScript называется сценарием . Она состоит из отдельных блоков кода, которые могут связаны с некоторыми элементами фильма:

  • ключевыми кадрами , код выполняется каждый раз, когда этот кадр проигрывается;
  • кнопками или клипами , код выполняется при возникновении какого-нибудь

Чтобы использовать действия для написания сценариев фильмов Flash , необходимо прежде всего изучить панель Actions .

Знакомство с панелью Действия (Actions )

Панель Actions (Действия) — это интерфейс создания сценариев, которые будут выполняться во время воспроизведения Flash-фильма. Работать с панелью Действия (Actions ) можно в двух режимах: Normal (Обычный) и Expert (Эксперт). В режиме Normal пользователю доступны некоторые автоматические функции создания кода, поэтому данный режим рекомендуется для новичков. Работая в режиме Normal, вы можете создавать действия и добавлять их в фильм посредством выбора соответствующих пунктов меню и перетаскивания элементов с помощью мыши. Режим Expert больше подходит для опытных разработчиков. В данном режиме панель Действия (Actions) больше похожа на окно текстового редактора, в котором пользователь самостоятельно вводит код сценариев.

Чтобы открыть или развернуть панель Действия (Actions ) , выполните одно из следующих действий:

  • из меню Окно (Window) выберите пункт Действия (Actions);
  • нажмите клавишу < F9 >.

После этого на экране появится или будет развернута панель Действия (Actions). Если эта панель была открыта, но скрыта другим окном, она переместится на передний план.

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

Область отображения сценария служит для отображения всех строк-операторов текущего сценария.

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


Работа с действиями объектов

Во Flash-фильмах действия могут быть связаны с объектами двух типов: кнопками и клипами. Связанное действие выполняется тогда, когда объект принимает сообщение о выполнении события. Для кнопок эти сообщения в основном поступают в виде сигналов от мыши или клавиатуры. Сообщения о событии клипа появляются в результате любых изменений или взаимодействий, которые произошли с самим клипом. Когда вы связываете действие с объектом и создаете сценарий, вы определяете источник события для каждого объекта. Действия связываются с кнопками и клипами, поскольку эти элементы являются интерактивными компонентами Flash-фильма. Как объекты, они могут принимать события мыши, данные и другого типа информацию во время воспроизведения фильма. Структура, создаваемая с помощью объектов и связанных с ними действий, будет определять способ взаимодействия аудитории с фильмом.

Важно помнить, что кнопки и клипы хранятся в библиотеке Flash в виде символов. Каждый раз при использовании символов в фильме фактически используется отдельная копия символа, или его экземпляр.

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

Однако любое действие выполняется только тогда, когда в фильме происходит определенного рода событие. В языке ActionScript (и во многих других объектно-ориентированных языках) действия управляются обработчиками событий.

Использование действий

Чтобы использовать действия в фильме Flash, необходимо связать их с объектом или кадром. Данный процесс достаточно простой и включает выбор объекта или кадра, выбор необходимого действия и определение специальных параметров, которые могут требоваться для действия. Все действия влияют только на связанный с ними экземпляр символа объекта или единственный кадр, содержащий действия.

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

Некоторые возможности, которыми обладает Flash благодаря использованию действий:

  • Создание сложных, интерактивных схем навигации.
  • Изменение качества воспроизведения фильма.
  • Связь с документами HTML, размещенными в Интернете, и обмен данными с приложениями сервера.
  • Обмен данными с хост-приложениями или другими Flash-фильмами.
  • Воспроизведение других фильмов в пределах главного фильма.

Возможности управления сценами с помощью сценариев ActionScript

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

Некоторых действий, с помощью которых можно управлять сценами.

  • gotoAndPlay() . Вызов действия gotoAndPlay() приводит к переходу головки воспроизведения к определенной сцене и кадру. Воспроизведение фильма продолжается с этого кадра.
  • gotoAndStop(). При вызове данного действия происходит переход к определенной сцене и кадру и остановка воспроизведения фильма.
  • play() . Это действие позволяет продолжить воспроизведение фильма после остановки.
  • stop() . С помощью данного действия можно остановить воспроизведение фильма.

События мыши

При связывании действия с экземпляром кнопки Flash автоматически присваивает этому действию обработчик события мыши. Этот обработчик определяет, какое событие при воспроизведении фильма будет инициировать выполнение действия (или действий), содержащихся в сценарии. Обработчик события мыши определяется действием on () .

Для установки или изменения обработчика события мыши, выполните следующие действия.

  1. Выберите кнопку, с которой необходимо связать действие либо для которой необходимо изменить обработчик событий.
  2. Откройте панель Actions и выполните одно из следующих действий.
    1. Если вы хотите установить обработчик события мыши, выберите действие on () из категории Actions – Movie Control .
    2. Если вы хотите изменить обработчик события мыши для уже существующего действия, выберите строку-оператор, содержащую название события, и на области отображения параметров установите соответствующий флажок.
  3. В области параметров отображается список различных обработчиков события мыши. Установите флажок рядом с названием соответствующего обработчика, и ваш сценарий автоматически будет обновлен. На рисунке показан внешний вид панели Actions, когда в области отображения сценария выбрана строка-оператор, содержащая обработчик события.

Имена и описания событий мыши в языке ActionScript :

  • Press . Событие press инициирует действие при нажатии кнопки, когда указатель мыши находится над объектом кнопки.
  • Release . Событие release инициирует действие при отпускании кнопки, когда указатель мыши находится над объектом кнопки. Это событие принимается по умолчанию.
  • Release Outside . Событие release Outside инициирует действие при отпускании кнопки, когда указатель мыши не находится над объектом кнопки.
  • Key Press . Событие key Press не связано с мышью. Оно инициирует действие, когда на клавиатуре будет нажата клавиша, указанная в поле слева от данного флажка.
  • Roll Over . Событие roll Over инициирует действие, когда указатель мыши помещается на объект кнопки.
  • Roll Out . Событие roll Out инициирует действие, когда указатель мыши помещается за пределы объекта кнопки.
  • Drag Over . Событие drag Over может показаться сначала несколько сложным. Фактически оно включает комбинацию из серии различных событий. Чтобы инициировать действие с помощью события drag Over , необходимо установить указатель мыши над объектом кнопки и выполнить щелчок, переместить указатель за пределы объекта, а затем снова поместить указатель на объект.
  • Drag Out . Чтобы инициировать действие с помощью события drag Out , выполните щелчок, когда указатель мыши находится над объектом кнопки, а затем переместите указатель за пределы объекта.

Практическая работа № 21. Работа с действиями кадра

  1. Создайте новый файл – Документ Flash .
  2. На Сцене 1 создайте анимацию.
  3. Добавьте Сцену 2 и создайте анимацию для данной сцены.
  4. Перейдите на Сцену 1, добавьте слой и пропишите действие переход на сцену 2 .

  1. На Сцене 2 или последней сцене вашего проекта поставьте кнопку, по клику которой откроется Сцена 1.

  1. Сохраните файл под именем Фамилия_21.fla.
  2. Опубликуйте в формате.swf
  3. И пришлите в одном архиве.


Практическая работа № 22. Нескольких действий в одном сценарии

  1. Создайте новый файл – Документ Flash .
  2. На Слои 1 в первом кадре пропишем команду stop() , для того чтобы анимация не начиналось, т.е. не происходило никаких действий.

  1. Создайте Слой 2. Начиная со 2 кадра и до 31, создайте анимацию, которая будет воспроизводиться при нажатии кнопки мыши.

  1. В 31 кадре пропишите остановку анимации, чтобы никаких действий не происходило.
  2. Добавьте Слой 3. Начиная со 32 кадра и до 62, создайте анимацию когда кнопка будет отпущена.

  1. Добавьте Слой 4. И разместите на нем кнопку. И пропишите действия:

on (press) {

GotoAndPlay (2); // при нажатии кнопку будет происходить действия начиная со 2 кадра

on (release) {

gotoAndPlay(32); // будет происходить действия начиная со 32 кадра, когда кнопка будет отпущена

  1. Протестируйте программу.
  2. Сохраните файл под именем Фамилия_22.fla.
  3. Опубликуйте в формате.swf
  4. И пришлите в одном архиве.

Использование действий для создания основных элементов управления воспроизведением фильма

Мы уже рассмотрели процесс связывания действий с различными элементами фильма. В данном разделе мы дадим обзор самых важных и полезных действий языка ActionScript. Эти базовые действия перечислены в том порядке, в котором они расположены в своих подкатегориях (Adobe Flash CS 3 Professional ).

Подкатегория Movie Clip Control

  • setProperty () . Установка атрибутов клипа: размеры, положение и т. д.
  • onClipEvent() . Определяет обработчик события клипа, который будет инициировать действие.
  • on () . Определяет обработчик события мыши, который будет инициировать какое-то действие.

Подкатегория Timeline Control

  • gotoAndPlay() . Переход к указанному в качестве параметра кадру или сцене и воспроизведение фильма с этого места.
  • gotoAndStop() . Переход к указанному в качестве параметра кадру или сцене и остановка фильма.
  • play () . Воспроизведение фильма.
  • stop () . Остановка фильма.
  • stopAllSounds() . Отключение звукового сопровождения фильма.

Подкатегория Browser/Network

  • fscommand() . Управление приложением Flash Player.
  • getURL() . Вызов фильма с указанным URL.
  • unloadMovie () . Выгрузка других Flash-фильмов.

Связь с URL

С помощью действия getURL() можно установить связь с URL непосредственно из Flash-фильма. Связь с URL позволяет выполнять две вещи. Во-первых, вы можете использовать Flash для создания Web-ссылки и загрузки информации в окно браузера из источника, соответствующего указанному URL. Во-вторых, действие можно использовать для передачи данных ресурсу, который находится по определенному URL.

Чтобы связать действие getURL() , необходимо выполнить следующее.

  1. Выберите кнопку, кадр или экземпляр клипа, с которым вы хотите связать действие.
  2. Откройте панель Actions .
  3. В области элементов ActionScript откройте подкатегорию Browser/Network и выполните двойной щелчок на значке действия getURL (). Действие getURL() имеет три параметра, которые должны быть определены: URL, Window (Окно) и Variables (Переменные). Существует также возможность использовать выражение, в котором описывается местоположение URL. Для этого необходимо установить флажок Expression (Выражение) справа от поля URL.
  4. В поле URL необходимо ввести абсолютный или относительный путь к ресурсу. Абсолютный путь включает полный адрес URL, например http://www. it - n . ru . Относительный путь содержит информацию о нахождении файла в пределах файловой структуры, где сохранен Flash-фильм, например такую: currentfolder / folderl / folder ().
  5. Раскрывающийся список Window позволяет определить, в каком окне браузер будет загружать документ, на который указывает URL. Вы можете ввести определенное имя фрейма или окна, ввести выражение, которое описывает местоположение окна, либо выбрать один из следующих элементов раскрывающегося списка.
  • _self . Документ загружается в текущем окне, где в настоящий момент воспроизводится фильм.
  • _blank . Документ загружается в новом окне.
  • _parent . Данный элемент указывает на текущее окно и позволяет заменить только фрейм, где в настоящий момент воспроизводится фильм.
  • _top . Данный элемент целесообразно использовать тогда, когда ваш фильм воспроизводится во фрейме, а новый документ, на который указывает URL, должен заполнить все окно браузера.
  1. Раскрывающийся список Variables (Переменные) используется для передачи переменных на URL, с которым вы устанавливаете связь.
  • Don"t Send (не передавать). Данный элемент установлен по умолчанию и используется в тех случаях, когда нет необходимости в обмене данными.
  • Send Using GET (передавать с использованием метода GET). Данный элемент списка выбирают в тех случаях, когда необходимо передать несколько переменных и объем передаваемых данных небольшой.
  • Send Using Post (передавать с использованием метода POST). Данный элемент списка выбирают в тех случаях, когда необходимо передавать большой объем информации.

Практическая работа № 23. Ставим ссылки на картинки

  1. Создайте новый файл – Документ Flash .
  2. Импортируйте все необходимые изображения для будущих кнопок (Ctrl + R ).
  3. Выделите первую картинку и нажмите F8 . Конвертируйте ее в кнопку.

  1. Дважды кликните на мувиклипе.
  2. Теперь кликните на кадре с заголовком Over и добавьте кадр, нажав F6.

  1. Создайте новый слой и кликните на кадре с заголовком Over и добавьте кадр (F6). После при помощи Rectangle Tool (R) обведите картинку.

  1. Вернитесь обратно на главную сцену и при помощи инструмента выделения (V) кликните на кнопке, нажмите F9 и введите следующий AS-код:

  1. Повторите все предыдущие шаги для других картинок.
  2. Протестируйте программу.
  3. Сохраните файл под именем Фамилия_23.fla.
  4. Опубликуйте в формате.swf
  5. И пришлите в одном архиве.

Задание

Создайте презентацию на свободную тема, используя материал урока.

Литература

  1. Гурвиц, Майкл, Мак-Кейб, Лора. Использование Macromedia Flash MX. Специальное издание.: Пер. с англ. — М.: Издательский дом "Вильяме", 2003. — 704 с.: ил. — Парал. тит. англ.
  2. Уотролл Э., Гербер Н. Эффективная работа: Flash MX . СПб.: Питер; Киев: DHV , 2003. – 720 с.: ил.
  3. http://www.interface.ru/

PAGE 1

Область элементов ActionScript

Раскрывающийся список сценариев

Область отображения сценария

Всем привет, сегодня покажу как двигать персонаж в сторону курсора, например как в игре Diablo 2. В примере будет использоваться Unity3D 2.6. Сам урок очень старый, и делался для создания серии уроков по созданию РПГ (для другого ресурса, но ресурс накрылся медным тазом, по этому для пользователей gcup это будет более полезно, да и некоторые писали мне в лс "как двигать персонаж в сторону курсора"), но я не смог тягаться c BugZerg по этому забросил проект. Ну что, начнем.
Первое – запускаем Unity3D. Выбираем в окне «Project Wizard» где будем хранит проект, и выбираем импортируемый ассет «Standart Assets.unityPackage».
Ждем пока импортируется ассет. Это может занять некоторое время.
Импорт закончен? Это хорошо, давайте продолжим дальше. О, и не стоит пугается странного интерфейса, это не Blender.
Давайте сначала добавим пол для нашего уровня. Заходим в меню «Game Object», далее в «Create Other» и выбираем в выпавшем меню «Cube». В вкладке «Inspector» настройте объект как на изображение:


Импровизированный пол для нашего уровня готов.
Теперь добавим персонажа. Заходим в меню «Game Object», далее в «Create Other» и выбираем в выпавшем меню «Capsule». В вкладке «Inspector» настройте объект как на изображении:


Вау, главный персонаж готов. Но чего-то не хватает, кажется что не хватает источника света. Давайте решим эту проблему. Заходим снова в меню «Game Object», далее в «Create Other» и выбираем в выпавшем меню «Point Light». В вкладке «Inspector» настройте объект как на изображении:


Ну а теперь займемся камерой. Выбираем камеру «Main Camera» во вкладке «Hierarchy», и заходим в меню «Component», далее в «Camera Control» и выбираем «Smooth Follow». Вы теперь можете увидеть, что изменилась вкладка «Inspector», не переживайте все это хорошо. Теперь нам надо выполнить одно из самых трудных действий для новичков. Выберите «Main Camera» в вкладке «Hierarchy», теперь методом Drag’n’Drop попробуйте перенести из вкладки «Hierarchy» объект «Capsule» в вкладку «Inspector» на панель «Smooth Follow (Script)» на свойство «Target», там где написано «None».
Ну а теперь создадим скрипт для перемещения главного персонажа. Перемещать будем следующим способом – персонаж находится в центре экрана, двигается в сторону курсора, когда нажата правая кнопка мыши. Ну а теперь про то, как мы будем поворачивать персонажа в сторону курсора. Помните Я говорил что использую решение похожее на хитрозакрученую жопу? Щас вы это увидите. Так как игрок всегда находится в центре экрана, то мы найдем сначала расстояние по оси Х от центра до курсора, далее найдем расстояние от центра до курсора но уже по оси Y. В итоге мы имеем два катета, и мы можем спокойно найти угол между катетом и гипотенузой по формуле - Угол = Арктангенс(Растояние по оси У, Растояние по оси Х). Может плохо объяснил, но вот графическое объяснение:


Хотя оно тоже может быть кривым, и вы ничего не поймете, по крайней мере, те кому я показывал рисунок - нифига не поняли.
Давайте уже кодить.
Первое, во вкладке «Project» кликнем на кнопку «Create» и выберем «Folder», переименуем ее на «Scripts» клавишей «F2». Теперь опять кликаем на кнопку «Create» и выберем «JavaScript», в окне «Project» появится скрипт «NewBehaviourScript», переименуйте его на «Game_Player_Script» клавишей F2. В итоге должна быть следующая структура:


Двойным кликом на «Game_Player_Script» открываем его, удаляем все что там есть и вставляем следующий код:

200?"200px":""+(this.scrollHeight+5)+"px");">
public var speed: int = 10;

public var gravity: int = 1;

Function Update () {
if(play){
if(Input.GetKey(KeyCode.Escape)){
Application.Quit();
}

If(grounded){
moveDirection = transform.TransformDirection(Vector3.forward);
moveDirection *= speed;
}
moveDirection.y -= gravity * Time.deltaTime;
if(Input.GetMouseButton(1)){




}
}
}



Теперь перетягиваем «Game_Player_Script» на «Capsule», который находится на вкладке «Hierarchy». Теперь выбираем «Capsule» и заходим в меню «Component», далее в «Physics» и выбираем «Character Controller».
Вот и все, все готово, жмем на кнопку «Play» и смотрим на результат наших трудов.
Ну а теперь про сам код:

200?"200px":""+(this.scrollHeight+5)+"px");">public var play:boolean = true;
public var speed: int = 10;
public var moveDirection: Vector3;
public var grounded: boolean;
public var gravity: int = 1;


В переменной play хранится флаг состояния игры, в speed – скорость перемещения, в moveDirection – направление движения, grounded – флаг по которому определяем на плоскости персонаж или нет, gravity – гравитация.

200?"200px":""+(this.scrollHeight+5)+"px");">function Update () {


Это стандартная функция которая будет вызыватся каждый раз когда происходит обновление сцены

200?"200px":""+(this.scrollHeight+5)+"px");">if(Input.GetMouseButton(1)){
var dx: int = Input.mousePosition.x - Screen.width / 2.0;
var dy: int = Input.mousePosition.y - Screen.height / 2.0;
var strawRadians: float = Mathf.Atan2(dx,dy);
var strawDigrees:float = 360.0 * strawRadians/(2.0*Mathf.PI);
transform.rotation.eulerAngles.y = strawDigrees;


Ну а тут проверяется, нажата ли правая кнопка мыши, если да то, рассчитываем угол поворота.

200?"200px":""+(this.scrollHeight+5)+"px");">var controller: CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;


Эта самая трудная часть кода. Тут мы получаем ссылку на компонент «Charactrer Controller», который и управляет персонажем. Его методом «Move» двигаем персонажа, а рассчитываем флаг «grounded».
Ну вот и все. Как видно игрок двигается в сторону мыши прям как в игре Diablo.
Всем пока, до встречи. Удачи в геймдеве. Итак. Всем привет. И сегодня я расскажу, как сделать простое движение персонажа. Сейчас только от третьего лица... Приступим...
Начнём, пожалуй, с создания персоажа. У меня это будет куб. Кто не знает, как создавать кубы или круги, поясняю - "GameObject" => "CreateOther" => "Cube". Создаём таким же образом камеру и привязываем к кубу (то бишь просто в иерархии перетаскиваем камеру на куб).
Так... Теперь создадим поверхность, по которой персонаж будет ходить. Пусть это будет просто "Plane". Ах, да... В конце урока будет ссылка с исходником по туториалу для тех, кто не понял.
Итак. Теперь создадим скрипт "Move". Добавим переменную игрока и переменную скорости.

Public GameObject player;
public int speed = 5;


Теперь укажем в методе старта, что это объект, на котором висит скрипт.

Void Start () {
player = (GameObject)this.gameObject;
}


Теперь сделаем само передвижение игрока вперёд при нажатии на "W" или стрелку вверх. Это делаем в методе void Update()! Для этого мы будем прибавлять позицию. Например вперёд.

If (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
}


Мы прибавили позицию вперёд (forward) и умножили на скорость, а точнее её переменную. И обязательно надо умножить на кадры в секунду (deltaTime).
Таким же образом сделаем движение назад. Только будем отнимать позицию.

If (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
player.transform.position -= player.transform.forward * speed * Time.deltaTime;
}


Таким же образом можем сделать и вправо и влево (right, left), но я сделаю просто поворот игрока, при нажатии на "A" или "D".
Я буду использовать "Rotate()". Чтобы поворачивать по оси "Y", я буду использовать "up" и "down". Кстати, для этого ещё надо объявить переменную "public int speedRotation = 3". И пишем в условиях.

If (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
player.transform.Rotate(Vector3.down * speedRotation);
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
player.transform.Rotate(Vector3.up * speedRotation);
}


Ну... Сейчас пришло время анимировать. Я записываю анимацию в самой юнити. Это можно открыть в "Window" => "Animation". В этом окне мы можем анимировать куб. Итак... Пропустим момент создания анимации. Давайте теперь создадим переменную анимации.

Public AnimationClip anima;


Теперь в старте добавим клип.

Animation.AddClip(anima, "animCube");


Теперь мы будем его воспроизводить через "CrossFade". Воспроизводить буду в условиях ходьбы вперёд и назад. Чтобы воспроизвести, нужно написать.



Итак... У нас получился хороший код. Сейчас мы сделаем прыжок. Всё так же просто. Опять мы будем прибавлять позицию. Только вверх (up).
И так же с новой переменной анимации "public AnimationClip anima2;"? так же добавим и переменной "public int jumpSpeed = 50;". И мы получаем условие.

If (Input.GetKeyDown(KeyCode.Space))
{
player.transform.position += player.transform.up * jumpSpeed * Time.deltaTime;
}


Всё... Наш код готов.

using UnityEngine;
using System.Collections;
public class Move: MonoBehaviour {
public GameObject player;
public int speedRotation = 3;
public int speed = 5;
public AnimationClip anima;
public int jumpSpeed = 50;

Void Start () {
player = (GameObject)this.gameObject;
animation.AddClip(anima, "animCube");
}
void Update(){
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
player.transform.position += player.transform.forward * speed * Time.deltaTime;
animation.CrossFade("animCube");
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
player.transform.position -= player.transform.forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
player.transform.Rotate(Vector3.down * speedRotation);
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
player.transform.Rotate(Vector3.up * speedRotation);
}
if (Input.GetKeyDown(KeyCode.Space))
{
player.transform.position += player.transform.up * jumpSpeed * Time.deltaTime;
}