Суббота, 26.05.2012, 18:45


Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [170]
Статьи об общих понятиях связанных с созданием игр
Движки и Гейммейкеры [85]
Статьи о программах для создания игр
Игры [39]
Статьи об играх, в том числе и сделанных на гейммейкерах
Софт [25]
Различные программы, в том числе в помощь игроделам
Разное [61]
Статьи, которые не вошли в определённые разделы
Наш опрос
Что в своих играх используете от стороннего производителя?
Всего ответов: 5354
Главная » Статьи » Создание игр

Unity3D. Движение в сторону курсора.
Всем привет, сегодня покажу как двигать персонаж в сторону курсора, например как в игре 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» открываем его, удаляем все что там есть и вставляем следующий код:

Теперь перетягиваем «Game_Player_Script» на «Capsule», который находится на вкладке «Hierarchy». Теперь выбираем «Capsule» и заходим в меню «Component», далее в «Physics» и выбираем «Character Controller».
Вот и все, все готово, жмем на кнопку «Play» и смотрим на результат наших трудов.
Ну а теперь про сам код:
Code
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 – гравитация.
Code
function Update () {

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

проверяем в игре мы или нет, если да, то:
Code
if(Input.GetKey(KeyCode.Escape)){
  Application.Quit();
}

Если нажата клавиша “Escape”, то выходим из игры.
Code
if(grounded){
  moveDirection = transform.TransformDirection(Vector3.forward);
  moveDirection *= speed;
}

Тут мы проверяем, находимся ли мы на плоскости, если да, то – получаем направление и увеличиваем его на скорость.
Code
moveDirection.y -= gravity * Time.deltaTime;

...и уменьшаем его по оси у на значение гравитации.
Code
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;

Ну а тут проверяется, нажата ли правая кнопка мыши, если да то, рассчитываем угол поворота.
Code
var controller : CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;

Эта самая трудная часть кода. Тут мы получаем ссылку на компонент «Charactrer Controller», который и управляет персонажем. Его методом «Move» двигаем персонажа, а рассчитываем флаг «grounded».
Ну вот и все. Как видно игрок двигается в сторону мыши прям как в игре Diablo.
Всем пока, до встречи. Удачи в геймдеве.
Категория: Создание игр | Добавил: noTformaT (25.04.2011) | Автор: Евгений Карпенко
Просмотров: 4873 | Рейтинг: 5.0/4
Теги: Unity3D Indie, Unity, Кодинг, Diablo, Diablo 2, Движение в сторону курсора, Unity3D, программирование, RPG, Скрипты
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Unity3D. Движение в сторону курсора.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями. Для этого воспользуйтесь предлагаемой ниже кнопкой:
Всего комментариев: 1
+1  
1 tracer07   (29.05.2011 12:17)
Отличная статья, очень помогла!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ссылки по теме
Поиск
10 случайных движков
Grit
Scroller Game Creator
Vavoom
FIFE
Doom Classic iOS
3D Rad
Realm Crafter
Luxinia
Nytro Game Engine
J.U.R.P.E.
Друзья сайта
Игровой форум GFAQ.ru Перевод консольных игр Разработка игр в СНГ Loadka.ru – загрузка файлов Игорный бизнес в России Реклама и заработок
Все права сохранены. GcUp.ru © 2008-2012 Рейтинг