Вторник, 19 Марта 2024, 07:22

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

Меню сайта
Категории каталога
Создание игр [354]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [144]
Статьи о программах для создания игр, уроки и описания.
Софт [39]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [160]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [128]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Игры какого жанра вы предпочитаете делать?
Всего ответов: 14610
Главная » Статьи » Создание игр

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) | Автор: Курбатов Никита
Просмотров: 152585 | Комментарии: 20 | Рейтинг: 3.8/76 |
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

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

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

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

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

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

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

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

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

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

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

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

1-10 11-14
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Open RPG Maker
  • RPG Architect
  • GameBryo
  • Green Elf Game Engine
  • Supertuxkart
  • Doom Legacy
  • PGD Community Engine
  • AppSalute Creator
  • GameDirector
  • Quantum Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг