Четверг, 17 Октября 2019, 11:04

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

Меню сайта
Категории каталога
Создание игр [323]
Статьи об общих понятиях связанных с созданием игр.
Программирование [73]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [126]
Статьи о программах для создания игр, уроки и описания.
Софт [28]
Различные программы, в том числе в помощь игроделам.
2D-графика [12]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [11]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [123]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [83]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Как вы увлеклись геймкриэйтингом?
Всего ответов: 9671
Главная » Статьи » Создание игр

Unity3D - создание движения персонажа и его анимация! Часть 1 (От третьего лица)
Итак. Всем привет. И сегодня я расскажу, как сделать простое движение персонажа. Сейчас только от третьего лица... Приступим...
Начнём, пожалуй, с создания персоажа. У меня это будет куб. Кто не знает, как создавать кубы или круги, поясняю - "GameObject" => "CreateOther" => "Cube". Создаём таким же образом камеру и привязываем к кубу (то бишь просто в иерархии перетаскиваем камеру на куб).
Так... Теперь создадим поверхность, по которой персонаж будет ходить. Пусть это будет просто "Plane". Ах, да... В конце урока будет ссылка с исходником по туториалу для тех, кто не понял.
Итак. Теперь создадим скрипт "Move". Добавим переменную игрока и переменную скорости.
Code

  public GameObject player;
  public int speed = 5;

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

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

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

if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
  {
  player.transform.position += player.transform.forward * speed * Time.deltaTime;
  }

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

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". И пишем в условиях.
Code

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". В этом окне мы можем анимировать куб. Итак... Пропустим момент создания анимации. Давайте теперь создадим переменную анимации.
Code

public AnimationClip anima;

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

animation.AddClip(anima, "animCube");

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

animation.CrossFade("animCube");

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

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; 
  } 
 }
}
 Надо только повесить его на куб и указать всё в инспекторе. Ах да... Можно поставить физику кубу, для более реалистичного прыжка.
Пример!
Всем спасибо)


Источник: КЛИК»
Категория: Создание игр | Добавил: Nekit_Aut (09 Мая 2012) | Автор: Курбатов Никита
Просмотров: 87971 | Комментарии: 20 | Рейтинг: 3.9/31 |
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 201 2 »
+0-
20 6_victor_8   (16 Декабря 2018 00:39)
Все разобрался. Кстать спасибо за гайд очень помог!

+0-
19 6_victor_8   (16 Декабря 2018 00:35)
Как сделать что бы на A персонаж ходил в лево? Все сижу и думаю, но не понимаю как это сделать.

+0-
18 Kamillion   (10 Сентября 2017 03:24)
Помогите, пользуюсь Unity недавно и не могу разобраться в скрипте, он пишет, что ошибка в последних трех кривых скобках, заранее спасибо

+0-
17 BN-Entwickler   (29 Апреля 2016 08:38)
BN-EntwicklerБольшое спасибо!

+0-
16 DiHand   (30 Марта 2016 19:39)
Огромное спасибо, пример полностью правда повторить не удалось уже на 5й версии(даже после автоисправления юньки). Но немного разобрался с порядком работы и куда что прописывать, так же заставил поворачиваться и двигаться вперед назад. Анимацию проигрываться так и не смог заставить, и самое забавное в том, что если это применить не к кубу с коллизией в виде куба, а к персонажу с коллизией по типу капсулы, то при подходе к любой стенке все летит к чертям и кувыркается ((( больше на симулятор астероида похоже получается))))

+2-
15 SomeFun   (14 Июня 2012 23:58)
Когда модель добавишь, поверни ее левее, чем сейчас, тогда будет в правильную сторону идти)

+0-
14 Vas_as   (13 Июня 2012 20:22)
У меня объекты не приближаются а уходят в сторону:(

+3-
13 DivES   (29 Мая 2012 21:37)
DivESСпасибо огромное за урок!) Так как на юньку перехожу, а норм уроки фиг найдешь, ты мне очень помог, продолжай в том же духе)) respect

+3-
12 Eyks001   (25 Мая 2012 18:08)
Eyks001Огромное спасибо! Продолжай, уроки по юне очень нужны happy !

+-1-
10 MadMax52   (13 Мая 2012 10:32)
MadMax52Добавь в конец урока полный скрипт для проверки.

+2-
11 Nekit_Aut   (13 Мая 2012 13:49)
Nekit_AutОк.
P.S. В конце урока есть пример. В нём все скрипты со всеми настройками. wink

1-10 11-14
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Imperial Game Engine
  • Silent Walk: RENAISSANCE
  • Haaf's Game Engine
  • LuxRender
  • DzQ
  • RTS Creator
  • Sylphis 3D
  • Maratis Engine
  • Verge
  • GZDoom
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2019 Рейтинг