Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сделать движение рук персонажа от первого лица, при движении камерой Unity

ещкере ода Ученик (100), открыт 2 недели назад
хочу сделать движение рук при движении камерой, шутер от первого лица
1 ответ
Татьяна Просветленный (32705) 2 недели назад
Для того чтобы сделать движение рук персонажа в шутере от первого лица при движении камеры в Unity, можно следовать этим шагам:
Настройка персонажа и камеры:
Создайте пустой объект для персонажа и назовите его, например, "Player".Внутри объекта "Player" добавьте камеру (например, "FirstPersonCamera").Добавьте к объекту "Player" компонент CharacterController.
Добавление модели рук:
Импортируйте 3D-модель рук (обычно это просто анимация рук).Поместите модель рук как дочерний объект к камере "FirstPersonCamera".
Скрипт для управления камерой и персонажем:
Создайте скрипт, который будет отвечать за управление движением камеры и персонажа. Например, назовите его PlayerController.

 using UnityEngine; 

public class PlayerController : MonoBehaviour
{
public float speed = 5.0f;
public float mouseSensitivity = 2.0f;
public Transform playerBody;
public Transform arms;

private CharacterController characterController;
private float xRotation = 0f;

void Start()
{
characterController = GetComponent();
Cursor.lockState = CursorLockMode.Locked;
}

void Update()
{
// Движение камеры
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;

xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);

playerBody.Rotate(Vector3.up * mouseX);
arms.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

// Движение персонажа
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");

Vector3 move = transform.right * moveX + transform.forward * moveZ;
characterController.Move(move * speed * Time.deltaTime);
}
}



Настройка анимации рук:


 using UnityEngine; 

public class PlayerController : MonoBehaviour
{
public float speed = 5.0f;
public float mouseSensitivity = 2.0f;
public Transform playerBody;
public Transform arms;

private CharacterController characterController;
private Animator animator;
private float xRotation = 0f;

void Start()
{
characterController = GetComponent();
animator = arms.GetComponent();
Cursor.lockState = CursorLockMode.Locked;
}

void Update()
{
// Движение камеры
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;

xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);

playerBody.Rotate(Vector3.up * mouseX);
arms.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

// Движение персонажа
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");

Vector3 move = transform.right * moveX + transform.forward * moveZ;
characterController.Move(move * speed * Time.deltaTime);

// Обновление анимации
bool isMoving = moveX != 0 || moveZ != 0;
animator.SetBool("isMoving", isMoving);
}
}
Похожие вопросы