Как сделать персонажа в unity3d от первого лица

Делаем управление от 1 лица для шутера

Всем привет! Данная статья должна быть наиболее интересной из всех предыдущих, так как в ней мы будем делать игрового персонажа с управлением от первого лица, после чего мы будем развивать игру как шутер.

Для начала создадим капсулу — это и будет наш игровой персонаж. Создавать куб не стоит, так как при подходе например, к бордюру, куб просто упрётся в него, а капсула сможет заскочить. После создания капсулы, создаём камеру и размещаем её на уровне глаз персонажа.

Делаем управление от 1 лица для шутера, изображение №1

Капсулу я немного растянул по Y и сжал по X, Z, что бы персонаж имел примерно те же габариты, что и реальный человек. А камеру «повесил» на тело персонажа.

Теперь приступим к написанию скриптов. Для начала напишем скрипт поворота камеры мышкой. Создадим скрипт «MouseLook.cs» и напишем в него следующее:

Весь скрипт как обычно закомментирован и мне кажется, в дополнительном объяснении не нуждается.

Этот скрипт мы вешаем как на камеру, так и на тело персонажа. Но камера должна вращаться только по оси X, а тело только по оси Y, для этого в выпадающем списке находящемся в инспекторе выбираем необходимые нам оси вращения. Мы вращаем тело по оси Y для того, что бы игрок поворачивался за камерой, а не камера поворачивалась отдельно от тела.

Приступим к написанию скрипта передвижения. Создадим скрипт «FirstPersonController.cs» и напечатаем следующее:

Код закомментирован, но для его понимания нужно хотя-бы примерно представлять как происходит передвижение в 3-ех мерном пространстве.

Теперь крепим скрипт к телу игрока. Добавляем так же компонент «Character Controller», он в дополнительной настройке не нуждается. Осталось только разместить в сцене Plane и поднять игрока над ним. Теперь можно запускать игру и бегать по виртуальному миру. Наш персонаж нуждается в доработке, но сейчас у нас уже есть основа для продолжения.

Платформер от первого лица на Unity3D

Учебные материалы для школы программирования. Часть 5

Предыдущие уроки можно найти здесь:

Продолжаем учиться — играя! Это занятие небольшое, но очень важное для дальнейшего движения по образовательной траектории. Мы познакомимся с системой анимации, контейнерами, и попробуем различные анимационные комбинации.

Все материалы к занятию вы найдете здесь.

Порядок выполнения

Создадим новый проект, импортируем в него стандартные ассеты Characters и Prototyping. Из префабов Prototyping создадим подобие игрового уровня.

Создадим платформу и вызовем окно анимации.

Нажмём на Create и назовём нашу анимацию.

Перейдём в режим записи и создадим новое правило для платформы — Transform->position.

Это необходимо, чтобы проставить первый и последний кейфрейм.

Поставим курсор куда-нибудь посередине и подвигаем платформу.

Автоматически создался ещё один кейфрейм. Если запустить проект, можно заметить, что платформа двигается.

Чтобы игрок мог на неё запрыгивать и передвигаться вместе с ней, на платформе нужно создать коллайдер-триггер и назначить скрипт Platform.

Переключившись в режим Curves, немного изменим характер её движения.

Платформа начала по-другому ускоряться и притормаживать. Если сейчас попытаться переместить платформу и нажать на плей, то окажется, что платформа появится всё равно в том же месте. Не лишним будет рассказать о зацикленных анимациях.

Создадим ещё одну платформу, но вложим её в пустой объект и выровняем в нули. Создадим новую анимацию.

Теперь, перемещая родительский объект, можно перемещать платформу вместе с анимацией.

Также, стоит коснуться работы аниматора. Найдём AnimatorController, выделим его и откроем окно Animator.
Создадим ещё одну анимацию и настроим переходы.
На этом этапе стоит объяснить принципы работы аниматора и возможность создавать условные переходы и переходы между анимациями с блендингом.

Теперь платформа воспроизводит первую анимацию, затем, 2 раза вторую, и так — по кругу. Обязательно расскажите ребятам, о возможности менять скорость анимации в аниматоре.

В заключении урока, стоит объяснить, что система анимаций — обширная тема, и мы затронули её лишь поверхностно. Стоит дать ученикам возможность самостоятельной работы, попутно отвечая на все возникающие вопросы.

Русские Блоги

3 способа установить вид от первого лица для игрока в Unity

Камера становится подобъектом капсулы, и на камеру помещается код:

Сцена плюс коллайдер

Добавьте следующий код в капсулу Player:

Это делается с помощью твердого тела

Вы можете двигаться

2. Добавьте в капсулу контроллер персонажа.

Снимите контроллер капсулы.

Просто поместите официальную документацию API напрямую, это делается с помощью символьного контроллера

3 . Сам Unity3d уже имеет вид от первого лица, нам нужно только двигать пальцами, чтобы направлять пакет.

Затем мы создаем новую папку для хранения Наша сумка

Дважды щелкните, чтобы войти в папку, затем щелкните правой кнопкой мыши в любом месте папки, чтобы открыть развертывание, а затем щелкните:

Import Package -> Charactor Controllor

(То есть импорт «Пакет управления ролями»)

Затем выскочило окно, неважно, что в нем, сначала нажмите ВСЕ (если вы не нажмете на него, unity3d может сообщить об ошибке самостоятельно), а затем нажмите «Импорт», чтобы экспортировать пакет.

Через некоторое время в папке появятся два пакета, что доказывает, что импорт прошел успешно!

Давай проигнорируем это В папке редактора перейдите в Стандартные активы-> Контроллеры персонажей-> Контроллер от первого лица (затем посмотрите следующее: «Контроллер от первого лица» — это капсула, фактически, это контроллер перспективы от первого лица)

Хорошо, давай просто поставим это Перетащите «Контроллер от первого лица» на сцену, и все готово! (Рядом с ним также находится «Контроллер от третьего лица», который представляет собой вид от третьего лица, и его также можно перетащить.)

Перспектива от первого лица и перспектива от третьего лица не могут появляться в сцене одновременно! (В противном случае он сообщит об ошибке!)

Резюме: 1, 2 метода, ролевой контроллер — управлять движением игрока, код камеры — получить вид от первого лица! Камера размещается на дочернем объекте игрока.

Третий метод не требует размещения камеры на подобъекте Player. Первые два метода должны сделать камеру подобъектом Player.

Как сделать персонажа в unity3d от первого лица

Нажимаем «Add component>>Physics>>Rigidbody» и «Add component>>Physics>>Capsule Collider». В «Capsule Collider» Выставляем размеры нашей капсулы что бы получилось как на картинке, слегка чуть больше модельки самой.

В «Rigidbody» ставим галочку «Use gravity». Раскрываем вкладку «Constraints» и ставим все 3 галочки на «Freeze Rotation». Это нужно для того что бы наш персонаж не проваливался сквозь землю, не падал на землю если вдруг окажется на неровности и тому подобное.
Программируем персонажа на перемещение.
Создадим c# скрипт «movePlayer».

using UnityEngine;
using System.Collections;

public class movePlayer : MonoBehaviour <

private GameObject player; //Переменна объекта персонажа с которым будем работать.

public static int speed = 6; //Скорость перемещения персонажа. Запись public static обозначает что мы сможем обращаться к этой переменной из любого скрипта
public static int _speed; //постоянная скорость перемещения персонажа
public int rotation = 250; //Скорость пповорота персонажа
public int jump = 3; //Высота прыжка

public static bool IsDrawWeapon; //Двоичная переменная, которая будет отвечать достануто ли у нас оружие.
public static float x = 0.0f; //угол поворота персонажа по оси x
void Start () <
IsDrawWeapon = false; //По умолчанию оружие у нас спрятано.
_speed = speed; //Задаем постоянное стандартное значение скорости персонажа
player = (GameObject)this.gameObject; //Задаем что наш персонаж это объект на котором расположен скрипт
>

void Update () <
if(IsDrawWeapon == true) //Если оружие вытащено
<
speed = _speed * 2; // Меняем скорость передвижени(я это сделал потому что, у этой моделки нету анимаций движения простым шагом с мечом. а понижать скорость анимации у бега получиться не красиво)
if(Input.GetKey(KeyCode.W)) //Если нажать W
<
player.transform.position += player.transform.forward * speed * Time.deltaTime; //Перемещаем персонажа в перед, с заданой скорость. Time.deltaTime ставится для плавного перемещения персонажа, если этого не будет он будет двигаться рывками
>
if(Input.GetKey(KeyCode.S))
<
speed = _speed / 2; //При передвижениии назад снижаем скорость перемещения
player.transform.position -= player.transform.forward * speed * Time.deltaTime; //Перемещаем назад
>
if(Input.GetKeyUp (KeyCode.S))
<
speed = _speed * 2; //Возвращаем cтандартное значение
>
if(Input.GetKey (KeyCode.A))
<
player.transform.position -= player.transform.right * speed * Time.deltaTime; //перемещаем в лево
>
if(Input.GetKey (KeyCode.D))
<
player.transform.position += player.transform.right * speed * Time.deltaTime; //перемещаем в право
>
if(Input.GetKey (KeyCode.Space))
<
player.transform.position += player.transform.up * jump * Time.deltaTime; //Прыгаем
>

if(Input.GetKey (KeyCode.Tab)) //При нажатии и на кнопку Tab
<
IsDrawWeapon = false; //Мы спрячем наше оружие.
>
>
else if(IsDrawWeapon == false) //Если оружие не спрятано. |||||| Сделано разделение на движения в зависимости от того вытащено ли у нас оружие или нет, потому что персонаж будет перемещаться сразной скорость у меня в этих случаях, как я уже написал из за отсутсвия некоторых анимаций у модельки.
<
speed = _speed;//Скорость в стандартное значение
if(Input.GetKey (KeyCode.LeftShift)) //Если зажать левый Shift
<
speed = _speed * 2; //Увеличиваем скорость перемещения(бег)
>
if(Input.GetKeyUp (KeyCode.LeftShift)) //Если отпустить
<
speed = _speed; //Возвращаем стандартное значение
>
if(Input.GetKey(KeyCode.W)) //Если нажать W
<
player.transform.position += player.transform.forward * speed * Time.deltaTime; //Перемещаем персонажа в перед.
>
if(Input.GetKey(KeyCode.S))
<
speed = _speed / 2;
player.transform.position -= player.transform.forward * speed * Time.deltaTime; //Перемещаем назад
>
if(Input.GetKeyUp (KeyCode.S))
<
speed = _speed; //Возвращаем cтандартное значение
>
if(Input.GetKey (KeyCode.A))
<
player.transform.position -= player.transform.right * speed * Time.deltaTime; //перемещаем в лево
>
if(Input.GetKey (KeyCode.D))
<
player.transform.position += player.transform.right * speed * Time.deltaTime; //перемещаем в право
>
if(Input.GetKey (KeyCode.Space))
<
player.transform.position += player.transform.up * jump * Time.deltaTime; //Прыгаем
>
if(Input.GetKey (KeyCode.Tab)) //при нажатии на кнопку таб
<
IsDrawWeapon = true; //Мы вытащим наше оружие
>
>

//Поворачиваем персонажа. Так как наша переменная x глобальна, из скрипта камеры в неё будем записывать длину на сколько сместился указатель мыши и по оси X и относительно этого будет повернут наш персонаж
Quaternion rotate = Quaternion.Euler (0,x,0); //Создаем новую переменную типа Quaternion для задавания угла поворота
player.transform.rotation = rotate; //Поворачиваем персонаж

codeusing UnityEngine;
using System.Collections;

public class CamMove : MonoBehaviour <
public Transform target; //Объект за которым летаем(Наш персонаж)
public float distance = 3.0f; //На каком ратоянии от него
public float xSpeed = 125.0f; //Чуствительность по Х
public float ySpeed = 50.0f; //Y Чуствительность
public float targetHeight = 2.0f; //Высота относительно объекта
//Минимальный и максимальный угол поворота Y инче камеру разверет, Дальше у нас будет простая функция для инвертации их в обратные числа
public float yMinLimit = -40;
public float yMaxLimit = 80;
//Максимальное удаление и приближение камеры к персонажу, искорость.
public float maxDistance = 10.0f;
public float minDistance = 0.5f;
public float zoomRote = 90.0f;

private float x = 0.0f; //Угол поворота по Y?
private float y = 0.0f; //Уго поворота по X?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *