Я пытаюсь добавить прыжки к элементам управления нашего скрипта управления, но он просто не работает, и я получаю разочарование, потому что я много пытался, чтобы он работал. Я не использую жесткие тела и скорее хочу использовать физику, основанную на сценариях, и - но позже - raycasts (для обнаружения земли). Это 3D, но с фиксированной перспективой, потому что персонажи - спрайты (мы думаем о том, чтобы попробовать стиль, похожий на Do not Starve, Paper Mario и т. Д.). И вещь, которую я хочу добавить сейчас, - это прыгать вверх, когда персонаж стоит на месте, а затем на прыжках, которые также позволяют персонажу перемещаться немного на расстоянии, когда персонаж движется. Ну, вы получите картину. Для этого мне сначала нужно начать прыгать, а также тяжести, чтобы вернуть персонажа, учитывая, что персонаж может приземлиться на земле с разной высотой, чем исходная земля. Что происходит сейчас, так это то, что персонаж прыгает чуть-чуть, например, даже не прыгает, а затем падает бесконечно - или бесконечно растет, когда прыжок снова нажимается. Итак, как я могу это исправить?Прыжки без жесткости в единстве
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controls3D : MonoBehaviour
{
public float player3DSpeed = 5f;
private bool IsGrounded = true;
private const float groundY = (float) 0.4;
private Vector3 Velocity = Vector3.zero;
public Vector3 gravity = new Vector3(0, -10, 0);
void Start()
{
}
void Update()
{
if (IsGrounded)
{
if (Input.GetButtonDown("Jump"))
{
IsGrounded = false;
Velocity = new Vector3(Input.GetAxis("Horizontal"), 20, Input.GetAxis("Vertical"));
}
Velocity.x = Input.GetAxis("Horizontal");
Velocity.z = Input.GetAxis("Vertical");
if (Velocity.sqrMagnitude > 1)
Velocity.Normalize();
transform.position += Velocity * player3DSpeed * Time.deltaTime;
}
else
{
Velocity += gravity * Time.deltaTime;
Vector3 position = transform.position + Velocity * Time.deltaTime;
if (position.y < groundY)
{
position.y = groundY;
IsGrounded = true;
}
transform.position = position;
}
}
}
Решение проблемы с бесконечным падением. Просто нужно было установить Velocity.y = 0; после transform.position = position; под IsGrounded = true; – Gota
Если вы пройдете, я уверен, вы увидите, что начальная скорость меньше, чем вы думали из-за 'Velocity.Normalize();', поэтому ваш Velocity.y - это некоторое число от -1 до 1. Я думаю, что ваша скорость вверх должна быть независимым от двух других направлений, или, вероятно, вы должны нормализовать скорость каждый раз, когда вы ее изменяете, а не только при заземлении. I.e., почему нормализуется в обоснованном случае, но не здесь: 'Velocity + = gravity * Time.deltaTime;'? – Quantic
Я думаю, что у меня есть что-то, спасибо. – Gota