Почему-то мой персонаж когда прыгает на другой объект со слоем Ground сначала совершает маленький прыжок, а потом совершает обычный(а иногда и вовсе больше, чем нужно).
Как я понимаю, это связано с разницей кадров, но я пробовал переместить
Синтаксис:
Используется csharp
hor = Input.GetAxisRaw("Horizontal");
jump = Input.GetAxis("Jump");
jump = Input.GetAxis("Jump");
в метод FixedUpdate и поведение не изменилось.
Я знаю, что проблему можно будет решить если поменять с GetAxis на GetButtonDown, но мне хочется создать механику, при которой персонаж будет совершать стабильный прыжок при постоянно зажатом пробеле. Как это можно реализовать?
Код:
Синтаксис:
Используется csharp
using UnityEngine;
public class Cubemove : MonoBehaviour
{
[SerializeField] float speed = 12.5f, jumpforce = 12.5f;
[SerializeField] Transform GroundCheck;
[SerializeField] LayerMask GroundLayer;
bool FaceRight;
Rigidbody2D rb;
float hor, jump;
private void Start() {
rb = GetComponent<Rigidbody2D>();
}
private void Update() {
hor = Input.GetAxisRaw("Horizontal");
jump = Input.GetAxis("Jump");
}
private void FixedUpdate() {
Vector3 move = new Vector2(hor * speed * Time.fixedDeltaTime, rb.velocity.y);
rb.velocity = move;
if(jump > 0 && isGround() == true) {
rb.AddForce(Vector2.up * jumpforce * jump, ForceMode2D.Force);
}
if(hor > 0 && FaceRight == true || hor < 0 && FaceRight == false) {
Flip();
}
}
bool isGround () {
return Physics2D.OverlapCircle(GroundCheck.position, 0.1f, GroundLayer);
}
void Flip() {
Vector2 flip = transform.localScale;
flip.x *= -1f;
transform.localScale = flip;
FaceRight = !FaceRight;
}
}
public class Cubemove : MonoBehaviour
{
[SerializeField] float speed = 12.5f, jumpforce = 12.5f;
[SerializeField] Transform GroundCheck;
[SerializeField] LayerMask GroundLayer;
bool FaceRight;
Rigidbody2D rb;
float hor, jump;
private void Start() {
rb = GetComponent<Rigidbody2D>();
}
private void Update() {
hor = Input.GetAxisRaw("Horizontal");
jump = Input.GetAxis("Jump");
}
private void FixedUpdate() {
Vector3 move = new Vector2(hor * speed * Time.fixedDeltaTime, rb.velocity.y);
rb.velocity = move;
if(jump > 0 && isGround() == true) {
rb.AddForce(Vector2.up * jumpforce * jump, ForceMode2D.Force);
}
if(hor > 0 && FaceRight == true || hor < 0 && FaceRight == false) {
Flip();
}
}
bool isGround () {
return Physics2D.OverlapCircle(GroundCheck.position, 0.1f, GroundLayer);
}
void Flip() {
Vector2 flip = transform.localScale;
flip.x *= -1f;
transform.localScale = flip;
FaceRight = !FaceRight;
}
}
Видео = https://youtu.be/dEkf6Y6hoco