Player Error 3D
Контроллер движения игрока
Контроллер движения обрабатывает нажатие клавиш на клавиатуре или кнопок на игровом джойстике.
-- Клавиатура --
Контроллер движения опрашивает установленные клавиши, и переключает режим движения игрока, в соответствии с замыслом разработчика для установленной клавиши.
Например, для передвижения игрока вверх/влево/вниз/вправо часто используются клавиши w/a/s/d.
Для того, чтобы опросить клавиатуру в движке Unity 6, необходимо подключить пакет UnityEngine.InputSystem и использовать класс Keyboard. В классе Keyboard перечислены все клавиши клавиатуры, а для того, чтобы определить нажата ли клавиша, используется атрибут isPressed.
-- Перемещение --
Чтобы перемещать игрока в пространстве игрового мира, без учета физики, достаточно использовать метод transform.
-- 3D модель --
3D модель игрока, созданная в программе Blender, импортируется в Unity, вместе с разработанной анимацией. Из режимов анимации конструируется аниматор Animator. Сконструированный аниматор используется в контроллере игрока.
Код
Таким образом, для клавиш w/a/s/d, получаем нижеприведенный листинг кода, который осуществляет передвижение игрока по нажатию клавиш w/a/s/d.:
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
Animator player_animator;
Keyboard keyboard;
public float movementSpeed = 5.0f;
// Метод Start() вызывается однажды,перед самым первым вызовом Update()
void Start()
{
player_animator= GetComponent<Animator>();
player_animator.SetTrigger("stay");
keyboard = Keyboard.current;
}
// Метод Update() вызывается один раз за игровой фрейм
void Update()
{
if (keyboard != null)
{
if (keyboard.wKey.isPressed)
{
player_animator.SetTrigger("walk");
transform.position += Vector3.up * Time.deltaTime * movementSpeed;
}
else if (keyboard.sKey.isPressed)
{
player_animator.SetTrigger("walk");
transform.position += Vector3.down * Time.deltaTime * movementSpeed;
}
else if (keyboard.aKey.isPressed)
{
player_animator.SetTrigger("walk");
transform.position += Vector3.left * Time.deltaTime * movementSpeed;
}
else if (keyboard.dKey.isPressed)
{
player_animator.SetTrigger("walk");
transform.position += Vector3.right * Time.deltaTime * movementSpeed;
}
else
{
player_animator.SetTrigger("stay");
}
}
}
}
Скрипт работает таким образом, что если клавиши w/a/s/d нажаты, то устанавливается триггер аниматора walk, а если не нажаты, тогда режим аниматора переключается триггером stay.
Файлы контроллера
Скрипт контроллера доступен для скачивания по ссылке Player.cs.
Файлы проекта: Player.cs

