
Теперь, в методе Update () внизу напишем такие строки:
RotatX = RotatX – Input.GetAxis («Mouse Y») * SensVert;
RotatX = Mathf.Clamp (RotatX, MinVert, MaxVert);
HeadTransf. localEulerAngles = new Vector3 (RotatX, HeadTransf. localEulerAngles. y, 0);
Первая из них считывает движение мыши по оси Y; вторая ограничивает вертикальные движения используя две переменные MinVert и MaxVert, имитируя реальные ограничения головы человека вверх-вниз; третья строка формирует вектор вращения нашей виртуальной головы, т.е. применяет сфомированное вращение.
Общий вид нашей программы теперь такой, сверьте его со своим вариантом:
using UnityEngine;
public class FPCharacter: MonoBehaviour
{
public float speed = 2.0f;
public float speedfast = 50.0f;
public float gravity = -9.8f;
public float SensHoriz = 2.0f;
public float SensVert = 2.0f;
public float MinVert = -70f;
public float MaxVert = 70f;
CharacterController CharControl;
float _speedfast;
Transform HeadTransf;
float RotatX;
void Start ()
{
CharControl = GetComponent
HeadTransf = transform.GetChild (0);
}
void Update ()
{
if (Input.GetKey (KeyCode. LeftShift))
{
_speedfast = speedfast;
}
else
{
_speedfast = 1;
}
float offsetX = Input.GetAxis («Horizontal») * speed * _speedfast;
float offsetZ = Input.GetAxis («Vertical») * speed * _speedfast;
Vector3 movement = new Vector3 (offsetX, 0, offsetZ);
movement = Vector3.ClampMagnitude (movement, speedfast);
movement. y = gravity;
movement *= Time.deltaTime;
movement = transform.TransformDirection (movement);
CharControl.Move (movement);
transform.Rotate (0, Input.GetAxis («Mouse X») * SensHoriz, 0);
RotatX = RotatX – Input.GetAxis («Mouse Y») * SensVert;
RotatX = Mathf.Clamp (RotatX, MinVert, MaxVert);
HeadTransf. localEulerAngles = new Vector3 (RotatX, HeadTransf. localEulerAngles. y, 0);
}
}
Сохраним наш сценарий и переключимся в редактор.
Нажмем кнопку «Пуск» и теперь можно походить по плоскости и покрутить головой используя мышь. Основа нашего персонажа игрока готова.
12. Префаб
Создайте папку Prefabs в окне Project, выделите нашего игрока Player в окне Hierarchy и держа нажатой левую кнопку мыши перетащите нашего игрока в папку Prefabs. Таким образом, в окне Project создастся префаб Player. Префабы это сборки игровых объектов, сценариев, мультипликаций и пр., например, как наш объект Player, как шаблоны, которые могут использоваться в разных сценах. Префаб который мы создали теперь является источником для всех подобных объектов Player, которые где либо будут использоваться в проекте. Одним из главных преимуществ префаба является возможность вносить изменения или улучшения только в источник префаба так, что все эти изменения сразу же отразятся на всех экземплярах этого префаба во всех сценах где он используется.
Вообще, при разработке игры такой как наша префабы требуются весьма редко и иной раз даже мешают своим существованием. Созданный префаб Player является одним из немногих исключений когда префаб точно нужен.
13. LevelExecuter
Теперь займемся управлением нашими будущими сценами-уровнями игры. Создайте два сценария с названиями LevExecuter и Globals. Не забудьте добавить MonoBehaviour после двоеточия у обоих:
using UnityEngine;
public class LevelExecuter: MonoBehaviour
{
}
Сценарий LevelExecuter будет одним из главных во всем проекте, он предназначен для управления игрой. Globals будет содержать разнообразные переменные, которые должны существовать при переходе из одной сцены игры в другую. Дело в том, что все сценарии, которые мы будем писать и уже написали существуют в сцене как объекты, т.е. пока работает сцена работают и ее объекты, но как только мы переходим (загружаем) в другую сцену или другой уровень игры, то все объекты сцены из которой уходим, как и сама сцена, исчезают из оперативной памяти компьютера. Для сохранения информации в таких случаях мы будем пользоваться сценарием Globals.
В сценарии LevelExecuter, под строкой using UnityEngine; напишите такую строку:
using gb = Globals;
Чтобы не обращаться к классу Globals каждый раз полным его названием будем использвать короткое – gb.
В сценарии Globals запишите такую строчку кода:
//запускалась ли игра
public static bool GameCreated;
Две косые черты в языке C# означают комментарий программиста. Они нигде не используются в программе и служат только пометками для вас. В объявлении переменной GameCreated появились два новых слова: static и bool. Bool (boolean) означает тип при котором переменная может принимать только два значения – истина (true) и ложь (false). Ключевое слово static означает, что переменная не принадлежит какому-то конкретному объекту, она независима, что нам и нужно для сохранения определенных данных при переходе между сценами. Сама же переменная GameCreated будет хранить информацию о том создана игра или нет – true или false. Сейчас при объявлении переменной без явного указания значения, ее значение равно – false.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.
Приобретайте полный текст книги у нашего партнера: