FPSController

С помощью этого префаба юнити можно очень просто создать «болванку» для персонажа игрока в трехмерной игре.

Префаб First Person Controller

Префаб First Person Controller находится в папке Standart Assets\Prefabs

Этот компонент содержит:

Character Controller — компонент,  используемый в играх от третьего и первого лица. На этот компонент не действуют команды rigidbody-физики.

  • Height — высота капсульного коллайдера.
  • Radius — можно сказать, что это ширина коллайдера.
  • Slope Limit — здесь указывается наклон, на который сможет передвигаться коллайдер.
  • Step Offset — коллайдер сможет подняться на следующую ступень, только если она ближе к земле чем значение этой переменной.
  • Min Move Distance — если персонаж передвинулся на меньшее значение, чем в этой переменной, он не сдвинется с места. Чаще всего используется, чтобы уменьшить дрожание.
  • Skin width — два коллайдера могут проходить сквозь друг друга настолько, насколько равна эта переменная. Большое значение уменьшает дрожание, маленькое может привести к тому, что коллайдер будет застревать.
  • Center — центровка капсульного коллайдера.

MouseLook — скрипт, с помощью которого направление камеры зависит от движения курсора мыши.

FPSWalker — скрипт, который отвечает за передвижение персонажа.

  • Speed — скорость передвижения персонажа.
  • JumpSpeed — высота прыжка персонажа.
  • Gravity — гравитация, которая действует только на персонаж во время прыжка.

Для удобного доступа к переменным скрипта FPSWalker, я создаю управляющий скрипт (scr_player_status)

var fps_walker;
var st_moving;
function Start () {
fps_walker = GetComponent(FPSWalker);
}

Этот скрипт ставится на главный объект префаба First Person Controller

Теперь с помощью переменной fps_walker мы можем получить доступ к скорости, мощности прыжка и гравитации. st_moving — переменная-флаг.

Чтобы продемонстрировать работу со скоростью, реализуем «уставание» — во время бега переменная, отвечающая за энергию, уменьшается. Низкая энергия приводит к низкой скорости.

Вверху скрипта выразим две переменные

var st_energy = 100.0;
var st_energy_max = 100.0;

Первая — это текущая энергия. Вторая — максимальный уровень энергии.

Теперь сделаем так, чтобы во время передвижения, персонаж терял очки энергии. Мы не будем изменять FPSWalker, и реализуем это все в scr_player_status.

function Update () {
if (Input.GetKey ("w" ) && fps_walker.grounded == true)
{
st_moving = 1;
st_energy = st_energy - 0.15;
}
else
{st_moving = 0;}
if (Input.GetKey ("s") && fps_walker.grounded == true)
{
st_moving = 1;
st_energy = st_energy - 0.05;
}
else
{st_moving = 0;}
}

fps_walker.grounded == true — это проверка на то, находится ли персонаж в воздухе. Мы же не хотим, чтобы персонаж терял энергию в прыжке?

Нам нужно показывать количество очков энергии, поэтому добавим в наш скрипт функцию OnGUI()

function OnGUI () {
GUI.Label (Rect (25, 90, 200, 200), "Energy "+st_energy);
}

Теперь добавим в наш скрипт зависимость скорости от энергии:

if (st_energy < 40)
{fps_walker.speed = 2;}
if (st_energy > 40)
{fps_walker.speed = 8;}

Теперь сделаем так, чтобы уровень энергии не мог принимать значения больше 100 и меньше 1

if (st_energy > st_energy_max)
{
st_energy = st_energy_max;
}
if (st_energy < 1.0)
{
st_energy = 1;
}

Теперь сделаем восстановление энергии в то время, когда персонаж стоит на месте

if (st_moving == 0)
{st_energy = st_energy+0.30;}

Вот весь скрипт (ставьте его на главный объект префаба First Person Controller)

var st_energy = 100.0;
var st_energy_max = 100.0;
var st_moving;
var fps_walker;
function Start () {
fps_walker = GetComponent(FPSWalker);
fps_walker.speed = 8;
}
function Update () {
/////
if (st_energy > st_energy_max)
{
st_energy = st_energy_max;
}
if (st_energy < 1.0)
{
st_energy = 1;
}
if (st_moving == 0)
{st_energy = st_energy+0.030;}
/////
if (st_energy < 40)
{fps_walker.speed = 1;}
if (st_energy > 40)
{fps_walker.speed = 8;}
/////
if (Input.GetKey ("w") && fps_walker.grounded == true)
{
st_moving = 1;
st_energy = st_energy - 0.15;
}
else
{st_moving = 0;}
if (Input.GetKey ("s") && fps_walker.grounded == true)
{
st_moving = 1;
st_energy = st_energy - 0.05;
}
else
{st_moving = 0;}
}
function OnGUI () {
GUI.Label (Rect (25, 90, 200, 200), "Energy  "+st_energy);
}
GUI.Label (Rect (25, 90, 200, 200), «Gathered memory «+scores);
Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s