Как мне заставить моего игрока двигаться быстрее на суше, чем в воздухе, при этом мой сценарий sprint все еще работает

#c# #unity3d

#c# #unity3d

Вопрос:

итак, я боролся с этим около 3 часов, пытаясь заставить это работать, так что извините за мой спагетти-код. этот сценарий заставляет персонажа двигаться, а также спринт. я не вижу, как добавить больше к этому абзацу, я полагаю, что я изложил довольно лаконично и рассказал помощникам, в чем моя проблема

 if (Input.GetKeyDown(KeyCode.LeftShift) amp;amp; isGrounded)
{
    moveSpeed = 10f;
}
    
if (Input.GetKeyUp(KeyCode.LeftShift) amp;amp; isGrounded)
{
    moveSpeed = 6f;
}
 

но, похоже, после того, как я добавил сценарий для замедления спринта в воздухе, перестал работать

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public Rigidbody rb;
    public Transform _camera;

    public float moveSpeed = 6f;
    float jumpForce = 5f;

    public LayerMask Ground;

    bool isGrounded;
    bool Landed;
    void Start()
    {

    }

    void Update()
    {
        //grounding
        isGrounded = Physics.CheckSphere(new Vector3(transform.position.x, transform.position.y - 1, transform.position.z), 0.4f, Ground);
        Landed = isGrounded

        //facing direction
        Debug.DrawLine(_camera.position, transform.forward * 2.5f);

        //SPRINTING

        if (isGrounded == false)
        {
            moveSpeed = 2f;
        }
        else
        {
            if (Input.GetKeyUp(KeyCode.W) == false)
            {
                moveSpeed = 6f;
            }
            if (Input.GetKeyDown(KeyCode.LeftShift) amp;amp; isGrounded)
            {
                moveSpeed = 10f;
            }
            if (Input.GetKeyUp(KeyCode.LeftShift) amp;amp; isGrounded)
            {
                moveSpeed = 6f;
            }
        }
        //moving
        float x = Input.GetAxisRaw("Horizontal") * moveSpeed;
        float y = Input.GetAxisRaw("Vertical") * moveSpeed;

        //jumping
        if (Input.GetKeyDown(KeyCode.Space) amp;amp; isGrounded)
            rb.velocity = new Vector3(rb.velocity.x, jumpForce, rb.velocity.z);

        //setting movement
        Vector3 move = transform.right * x   transform.forward * y;
        rb.velocity = new Vector3(move.x, rb.velocity.y, move.z);
    }
}
 

Комментарии:

1. в else части вы amp;amp; isGrounded бесполезны, потому что вы уже знаете, что это true (именно потому, что вы в else части)

Ответ №1:

Возможно, какой-то псевдокод может быть:

 if(isGrounded)
{
    moveSpeed = isSprinting
        ? 10f  // sprinting on ground
        : 6f;  // walking on ground
}
else
{
    moveSpeed = isSprinting
        ? 3f  // sprinting in the air
        : 2f; // moving in the air
}
 

Или наоборот:

 if(isSprinting)
{
    moveSpeed = isGrounded
        ? 10f  // sprinting on ground
        : 3f;  // sprinting in the air
}
else
{
    moveSpeed = isGrounded
        ? 6f  // walking on ground
        : 2f; // moving in the air
}