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()! Для этого мы будем прибавлять позицию. Например вперёд.
Мы прибавили позицию вперёд (forward) и умножили на скорость, а точнее её переменную. И обязательно надо умножить на кадры в секунду (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;". И мы получаем условие.
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;
Надо только повесить его на куб и указать всё в инспекторе. Ах да... Можно поставить физику кубу, для более реалистичного прыжка. Пример! Всем спасибо)
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Огромное спасибо, пример полностью правда повторить не удалось уже на 5й версии(даже после автоисправления юньки). Но немного разобрался с порядком работы и куда что прописывать, так же заставил поворачиваться и двигаться вперед назад. Анимацию проигрываться так и не смог заставить, и самое забавное в том, что если это применить не к кубу с коллизией в виде куба, а к персонажу с коллизией по типу капсулы, то при подходе к любой стенке все летит к чертям и кувыркается ((( больше на симулятор астероида похоже получается))))