Четверг, 18 Октября 2018, 01:56

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

Меню сайта
Категории каталога
Создание игр [312]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [94]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [69]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какая рубрика портал GcUp.ru вам более нравится?
Всего ответов: 1592
Главная » Статьи » Создание игр

Unity3D - создание движения персонажа и его анимация! Часть 2 (Платформер)
Снова всем привет. Это вторая часть статьи про движение персонажа в Unity3D. Этот туториал опять будет с примером. Тут мы рассмотрим движение платформера. Но теперь без анимации. Про неё можете прочитать в предыдущей статье, и там же описано передвижение от третьего лица. итак. Тут всё будет чуток проще, но для прыжка мы теперь не будем прибавлять позицию. Теперь мы будем давать пинка под зад персонажу импульсом rigidbody импульс физическому телу. Приступим. (Конечно созаём скрипт Move. Про создание сцены, где будет всё происходить, вы так же можете прочитать опять же в предыдущем туториале)
Для начала привяжем к скрипту обязательный компонент. Над классом напишем "[RequireComponent(typeof(Rigidbody))]".
Code

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour {
}

Вот. Теперь объявим переменные. Игрока, его ригидбоди скорости, скорости прыжка, булевую переменную (проверяющую прыжок), и саму платформу, с которой при приземлении будет сталкиваться игрок (в инспекторе укажите, ага?).
Code

  public GameObject Player;
  public Rigidbody ThisRigidpody;
  public int speed = 5;
  public int JumpSpeed = 8;
  public bool Jumping;
  public GameObject Platform;

В старте присваиваем переменной игрока и ригидбоди компоненты, на объекте которых висит скрипт.
Code

  void Start () {
  Player = (GameObject)this.gameObject;
  ThisRigidpody = (Rigidbody)this.rigidbody;
  }

Теперь будем, для передвижения влево и вправо, прибавлять позицию. Но тут ещё всё зависит от того, как вы поставите игрока (у меня игрок - циллиндр). У меня он смотрит вбок, значит, чтобы он шёл по бокам, нужно прибавлять и отнимать по forward'у... Делаем в "void Update()".
Code

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);".
Теперь давайте напишем условие.
Code

  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)".
Code

  void OnCollisionEnter(Collision collis)
  {
  if (collis.gameObject == Platform)
  {
  Jumping = false;
  }
  }

В методе мы проверяем, если коллизия, это платформа, то "Jumping = false". И снова можно прыгать.
Ну... Вроде всё.
Code

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; 
  } 
  } 

 Можете проверить, добавить анимацию и т.д.
Вот пример.
Категория: Создание игр | Добавил: Nekit_Aut (10 Мая 2012) | Автор: Курбатов Никита
Просмотров: 26586 | Комментарии: 5 | Рейтинг: 4.2/8 |
Теги: прибавление позиции, Unity3D, Прыжок, платформер, RigidBody, C#, Позиция
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

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

Всего комментариев: 5
+-1-
4 PROGGERLITE   (26 Мая 2012 09:33)
PROGGERLITEНормально

+-3-
3 AGENTX001   (21 Мая 2012 15:59)
AGENTX001Чувак, странная у тебя какаято проверка на коллизию с платформой... А если он боком каснётся платформу?

+0-
5 Nekit_Aut   (31 Мая 2012 09:37)
Nekit_AutОттолкнётся мол от стены biggrin

+-2-
1 Fr0sT   (11 Мая 2012 15:50)
Fr0sTОтличная статья!Всё подробно и доходчиво объяснил!Молодец!!!

+-2-
2 Nekit_Aut   (11 Мая 2012 15:58)
Nekit_AutХех) Спасибо)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • PrBoom-plus
  • Genesis-3D
  • Point&Click Dev Kit
  • GLHeretic
  • URQ
  • Nebula
  • 001 Game Creator
  • Away3D
  • Scrupp
  • Mario Builder
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг