Всем привет! Это наш 2 урок по созданию FPS на движку Unity 3D.Сегодня мы сконцентрируем внимание на нашем игроку (Player), попытаемся сделать : -1.Поставить игрока на нашу сцену, -2.Сделаем ускорение в бегу( при нажатии Shift), -3.Создать возможность приседать ( при нажатии Ctrl), -4.Звук ходьбы. -5. Движение камеры при ходьбе.
1.Начнём с того, что добавим игрока на сцену, для этого : в окне Project откроем папку Standard Assets-> Character Controllers, и вытянем на сцену префаб “First Person Controller”.После того как вы сделали это, вытяните игрока с земли( приблизительно на пол метра), что-бы при запуске игры он не провалился сквозь землю. Можете запустить игру, проверить всё ли правильно мы сделали.
2.Теперь сделаем ускорение в бегу. Начнём с того , что создадим файл скрипта, для этого : в окошке Project (нажмём ПКМ на пустое место и выберем Create->JavaScript) в окне Project появится файл с JavaScript.Назовём его “ PlayerRun” и приступим к его написанию. Откройте этот скрипт. Запустится программа “Mono Develop”.Удаляем всё что есть сейчас в скрипте, и пишем :
Код
function Start () { CharacterMotor.an = 1; } // Character Motor,при старте игры - скорость ровняется 1. function Update() { if (Input.GetKey(KeyCode.LeftShift)) { //Если нажата кнопка Left Shift то… CharacterMotor.an = 1.5; //Скорость возрастает с 1, на 1.5 } else { if (Input.GetKeyUp (KeyCode.LeftShift)) { //Если кнопка отпущена, то… CharacterMotor.an = 1; //Скорость снижается с 1.5, на 1 } } }
Теперь сохраним скрипт нажатием на Ctrl+S, или File->Save в меню “Mono Develop”. Откроем Unity, и перетащим этот скрипт на нашего игрока (First Person Controller).Вот и всё, теперь протестируйте игру, при нажатии на левый Shift, игрок ускорится на 0.5, при отпускании уменьшится к стандартному.
3.Сделаем возможность приседать. Создадим новый Javascript (так, как было указано выше), и назовём его “CtrlPress”, откройте его, и впишите следующий код :
Код
var controller : CharacterController; //Указываем игрока var oldHeight; var newHeight: float; var newPos; var bf : boolean = false;
Сохраним скрипт, и откроем Unity. Теперь перетащим скрипт “CtrlPress” на нашего игрока. После того как вы перетащите скрипт, нажмите на “First Person Controller” в меню Hierarchy ( чтобы он появился в окошке Inspector), и найдите там наш скрипт, и там где написано ”controller” укажите нашего игрока (перетащив игрока ”First Person Controller” на кружок рядом с ”controller” ) . Проверьте его, запустив игру.При нажатии на кнопку ”левый Ctrl” игрок присядет , при отпускании кнопки игрок встанет. 4.Добавим разнообразия нашему игроку, добавим звук ходьбы. Сначала добавим компонент ( для того чтобы звук воспроизводился ) нажмём на игрока, в меню Unity на вкладку Component->Audio->Audio Sourse( перепроверьте что бы ”First Person Controller” был отмечен в Hierarchy ). Создадим Javascript, и назвём его “PlayerMusicController”, впишем код :
Код
var WalkSound : AudioClip[]; var AudioStepLength = 0.3;
function Awake () {
PlayStepSounds(); }
function PlayStepSounds () { var controller : CharacterController = GetComponent(CharacterController);
Также добавим его к игроку. В меню Inspector, в нашем скрипте, там где WalkSound->Size выставляем то число звуков, которые будут проигроватся при нажатии на кнопки управления ( для разнообразия, у меня стоит 3 звука ходьбы, и при нажатии кнопок управления, они каждый раз играют по разному ( в том смысле что, 3 разных звука играют поочерёдно ), и получается красивый звук. Всё, звук готов, теперь перейдём на 5-ю тему. 5.Теперь наконец то сделаем так, что при ходьбе, камера нашего игрока немного передвигалась по оси “Y”(имитируя этим ходьбу ).Создадим скрипт С# (также как и Java Script, только выберем C#), назовём его CameraFPS, откроем его, и впишем код :
Код
using UnityEngine;
public class Camera_FPS : MonoBehaviour { public Vector2 rotationLimit; //Limit for the vertical rotation of the camera. X is higher limit, Y is lower limit. public float rotationSpeed = 600.0f; //Vertical rotation speed of the camera public bool invertY = true; //Invert vertical rotation public bool headBobEnabled = true; //Enables/disables head bobbing public Vector2 headBobDistance = new Vector2(0.2f, 0.3f); //The distance the camera travels in the y-axis for the headBobbing effect public float headBobSpeed = 5.0f; //Speed at which the player's head bobs
private Vector3 initialLocalPos; //Starting local y-position of camera private float rot; //Stores the rotation value incremented by mouse movement in the y-axis private Transform t; //Reference to the transform component of the game object
public void Awake() { t = transform; //Cache transform component initialLocalPos = t.localPosition; //Store initial local position of the camera }
//Head bobbing if(headBobEnabled) { //Calculate percentage of blend between stationary and bobbing camera positions float percentage = Mathf.Min(1, Mathf.Abs(Input.GetAxis("Vertical")) + Mathf.Abs(Input.GetAxis("Horizontal")));
//Calculate desired x position float desiredPosX = initialLocalPos.x + headBobDistance.x * Mathf.Sin(Time.time * headBobSpeed + Mathf.PI/2); //Blend between stationary and desired x position float newX = (initialLocalPos.x * (1 - percentage)) + (desiredPosX * (percentage));
//Calculate desired y position float desiredPosY = initialLocalPos.y + headBobDistance.y * Mathf.Sin(Time.time * 2 * headBobSpeed); //Blend between stationary and desired y position float newY = (initialLocalPos.y * (1 - percentage)) + (desiredPosY * (percentage));
t.localPosition = new Vector3( newX, newY, t.localPosition.z); } } }
Сохраним этот скрипт, откроем Unity, протестируем его (запустив игру ).По идеи, камера должна приподниматься, и опускаться. Ну вроде-бы всё:).На следующем уроке мы попытаемся сделать : -Радар (камера виду с верху ), -Прицел, Фонарик, , -Пометки игроков на радаре ( типа : сам игрок – зелёный (или синий ), а боты – красные), -Поинты ( точки к которым нужно будет идти нашему игроку для прохождения миссии).
Всем удачи!!!
Некоторые скрипты взяты с этого, и других сайтов, а некоторые написаны мною. Спасибо всем за внимание Моя игра - Collect Fruit
Сообщение отредактировал AIDEN - Чт, 27 Июн 2013, 10:53
хотя я сделал все как написано. дальше камера - тоже не работает а звук ходьбы- просто нету audio clip Я новичок пока мало чего знаю подскажите А нет не надо разобрался уже
Сообщение отредактировал eee12 - Ср, 16 Окт 2013, 11:07
Если камера привязана к персу, то обязательно. Иначе нереалистично совсем будет. А, сорри, если включена гравитация, то перс просто упадет. Не совсем реалистично, но незаметно.
А, сорри, если включена гравитация, то перс просто упадет. Не совсем реалистично, но незаметно.
Если всё хорошо настроить то будет норм)
Цитатаseaman ()
Если камера привязана к персу, то обязательно
У меня в проекте на видосах привязана,и я позицию не трогаю) У меня меняется радиус и высота по игрику,и он совсем незаметно всё делает,что кажется вполне реалистичным)