Просмотров: 85374

Как сделать движение в юнити

Закрыть ... [X]

Снова всем привет. Это вторая часть статьи про движение персонажа в Unity3D. Этот туториал опять будет с примером. Тут мы рассмотрим движение платформера. Но теперь без анимации. Про неё можете прочитать в предыдущей статье(http://flight-dream.com/forum/index.php?topic=211.0), и там же описано передвижение от третьего лица. итак. Тут всё будет чуток проще, но для прыжка мы теперь не будем прибавлять позицию. Теперь мы будем давать пинка под зад персонажу импульсом rigidbody импульс физическому телу. Приступим. (Конечно созаём скрипт Move. Про создание сцены, где будет всё происходить, вы так же можете прочитать опять же в предыдущем туториале)
Для начала привяжем к скрипту обязательный компонент. Над классом напишем "[RequireComponent(typeof(Rigidbody))]".

Код: [Выделить]

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour {
} Вот. Теперь объявим переменные. Игрока, его ригидбоди скорости, скорости прыжка, булевую переменную (проверяющую прыжок), и саму платформу, с которой при приземлении будет сталкиваться игрок (в инспекторе укажите, ага?).

Код: [Выделить]

public GameObject Player;
public Rigidbody ThisRigidpody;
public int speed = 5;
public int JumpSpeed = 8;
public bool Jumping;
public GameObject Platform;
В старте присваиваем переменной игрока и ригидбоди компоненты, на объекте которых висит скрипт.

Код: [Выделить]

void Start () {
Player = (GameObject)this.gameObject;
ThisRigidpody = (Rigidbody)this.rigidbody;
} Теперь будем, для передвижения влево и вправо, прибавлять позицию. Но тут ещё всё зависит от того, как вы поставите игрока (у меня игрок - циллиндр). У меня он смотрит вбок, значит, чтобы он шёл по бокам, нужно прибавлять и отнимать по forward'у... Делаем в "void Update()".

Код: [Выделить]

if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
Player.transform.position += Player.transform.forward speed Time.deltaTime;
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
Player.transform.position -= Player.transform.forward speed Time.deltaTime;
} Итак. У нас всё ходит. Теперь сделаем прыжок. Мы просто придадим импульс ригидбоди игрока. Вот как это делается: " ThisRigidpody.AddForce(Player.transform.up JumpSpeed, ForceMode.Impulse);".
Теперь давайте напишем условие.

Код: [Выделить]

if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow))
{
if (Jumping == false)
{
Jumping = true;
ThisRigidpody.AddForce(Player.transform.up JumpSpeed, ForceMode.Impulse);
}
} Мы проверяем, если булевая переменная "Jumping = false", то тогда можно прыгать. То есть придаётся импульс физическому телу.
Теперь давайте доделаем всё в проверке булевой переменной. Создадим новый метод. "void OnCollisionEnter(Collision collis)".

Код: [Выделить]

void OnCollisionEnter(Collision collis)
{
if (collis.gameObject == Platform)
{
Jumping = false;
}
}
В методе мы проверяем, если коллизия, это платформа, то "Jumping = false". И снова можно прыгать.
Ну... Вроде всё.

Код: [Выделить]

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour {
public GameObject Player;
public Rigidbody ThisRigidpody;
public int speed = 5;
public int JumpSpeed = 8;
public bool Jumping;
public GameObject Platform;
void Start () {
Player = (GameObject)this.gameObject;
ThisRigidpody = (Rigidbody)this.rigidbody;
}
void Update(){
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
Player.transform.position += Player.transform.forward speed Time.deltaTime;
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
Player.transform.position -= Player.transform.forward speed Time.deltaTime;
}
if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow))
{
if (Jumping == false)
{
Jumping = true;
ThisRigidpody.AddForce(Player.transform.up JumpSpeed, ForceMode.Impulse);
}
}
}
void OnCollisionEnter(Collision collis)
{
if (collis.gameObject == Platform)
{
Jumping = false;
}
}
} Можете проверить, добавить анимацию и т.д.
Примерчик: http://files.guglu.ru/fn3ke2c4kr11.html
Источник: http://flight-dream.com/forum/index.php?topic=212.0



Рекомендуем посмотреть ещё:



Похожие новости


Аппарат сахарной ваты сделанный в домашних условиях
Как сделать ангар для world of tanks
Пошаговое вязание крючком платья для девочек
Кукла в ванную комнату своими руками
Фото веранды своими руками для частного дома
Как сделать себе скин в одиночной игре


Как сделать движение в юнити
Как сделать движение в юнити


Unity 3D - создание движения персонажа и его анимация! Часть 1 (От.)
Основы создания 2D персонажа в Unity 3D 4.3. Часть 2: бегущий персонаж




ШОКИРУЮЩИЕ НОВОСТИ