Что не так с кодом? Персонаж просто уходит под землю. C#
саша мордашов
Ученик
(148),
на голосовании
1 месяц назад
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Player : MonoBehaviour { // Придаем скорость public float speed = 5f; // Сила прыжка public float jumpForce = 10f; // Гравитация public float gravity = -9.81f; // Переменная для хранения вертикальной скорости private float verticalVelocity = 0f; // Слой, который считается землей public LayerMask groundLayer; // Объект, который проверяет, на земле ли игрок public Transform groundCheck; // Радиус проверки земли public float groundDistance = 0.4f; // Флаг, указывающий, на земле ли игрок private bool isGrounded; void Update() { // Проверяем, на земле ли игрок isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundLayer);
// Если игрок на земле, сбрасываем вертикальную скорость if (isGrounded && verticalVelocity < 0) { verticalVelocity = -2f; } //СОздаем и обнавляю праметры движения float horizontal = Input.GetAxis("Horizontal"); float vertical = Input.GetAxis("Vertical");
Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized; Vector3 velocity = direction * speed;
// Если нажата кнопка прыжка и игрок на земле if (Input.GetButtonDown("Jump") && isGrounded) { verticalVelocity = Mathf.Sqrt(jumpForce * -2f * gravity); }
// Применяем вертикальную скорость velocity.y = verticalVelocity;
// Перемещаем игрока transform.Translate(velocity * Time.deltaTime); } }