привет, напиши мне код на C# Unity чтобы персонаж ходил и бегал
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public CharacterController controller; // ссылка на компонент управления персонажем
public float speed = 12f; // скорость передвижения
public float sprintSpeed = 18f; // скорость бега
public float gravity = -9.81f; // гравитация
public float jumpHeight = 3f; // высота прыжка
public Transform groundCheck; // точка проверки столкновения с землей
public float groundDistance = 0.4f; // дистанция проверки земли
public LayerMask groundMask; // маска слоя земли
private Vector3 velocity; // скорость персонажа
private bool isGrounded; // находится ли персонаж на земле
private void Update()
{
// проверяем, находится ли персонаж на земле
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
// если персонаж на земле и нажата клавиша прыжка, то прыгаем
if (isGrounded && Input.GetButtonDown("Jump"))
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
// получаем направление передвижения
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
// устанавливаем скорость передвижения в зависимости от состояния бега
float currentSpeed = Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : speed;
// вычисляем вектор направления передвижения и поворота
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * currentSpeed * Time.deltaTime);
// учитываем гравитацию
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
}
Этот код содержит класс `PlayerMovement`, который отвечает за передвижение персонажа. В нем объявлены переменные `controller`, `speed`, `sprintSpeed`, `gravity`, `jumpHeight`, `groundCheck`, `groundDistance` и `groundMask`,управляющие поведением персонажа.
В методе `Update` происходит проверка, находится ли персонаж на земле, и если да, то обрабатывается прыжок по нажатию клавиши прыжка (`Input.GetButtonDown("Jump")`).
Далее получаются значения горизонтального (`x`) и вертикального (`z`) ввода, и устанавливается скорость передвижения в зависимости от того, нажата ли клавиша бега (`Input.GetKey(KeyCode.LeftShift)`).
Затем вычисляется вектор направления движения персонажа (`move`), учитывая поворот (`transform.right` и `transform.forward`), и этот вектор устанавливается с помощью функции `CharacterController.Move`.
Наконец, учитывается гравитация (`velocity.y += gravity * Time.deltaTime`), и персонаж перемещается с помощью `CharacterController.Move`.
При необходимости, данный код можно доработать дополнительными функциями, такими как установкой анимацийНажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет