Ошибка перехода игрока в Unity 3D C # - PullRequest
0 голосов
/ 03 апреля 2019

Итак, я работал над сценарием, чтобы заставить шар двигаться по оси x с постоянной скоростью, но также можно контролировать. Когда я нажимаю пробел, чтобы прыгать. Он не прыгнет, если я не нажму кнопку, как 5-6 раз. После того, как мяч прыгнет в первый раз, если вы несколько раз нажмете пробел, он будет прыгать, но если вы оставите его в покое и позволите ему катиться, а затем попытайтесь прыгнуть снова. Это не позволит вам. Я очень смущен.

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

public class Speed : MonoBehaviour
{
    public float sspeed = 7.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;

    private Vector2 moveDirection = Vector2.zero;

    void Start()
    {

    }
    void Update()
    {
        if (GetComponent<CharacterController>().isGrounded)
        {
            moveDirection = new Vector2();
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= sspeed;
            moveDirection.x = sspeed;
        }
        else if (GetComponent<CharacterController>())
        {
            moveDirection.x = gravity;
        }

        moveDirection.x -= gravity * Time.deltaTime;
        GetComponent<CharacterController>().Move(moveDirection * Time.deltaTime);
        CharacterController player = GetComponent<CharacterController>();

        if (GetComponent<CharacterController>().isGrounded)
        {
            moveDirection = new Vector2();
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= sspeed;

            if (Input.GetKeyDown("space"))
            {
                moveDirection.y = jumpSpeed;
            }
        }

        moveDirection.y -= gravity * Time.deltaTime;
        GetComponent<CharacterController>().Move(moveDirection * Time.deltaTime);
    }
}

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Есть лучший способ сделать это:

Rigidbody body = GetComponent<Rigidbody>(); 

if(Input.GetKeyDown(KeyCode.Space)){
    body.AddForce(transform.up*jumpSpeed);
}
0 голосов
/ 03 апреля 2019

Попробуйте это

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

public class ConstantMoveByX : MonoBehaviour
{
    [SerializeField]
    private float constantSpeed = 10.0f;
    [SerializeField]
    private float jumpForce = 25.0f;
    [SerializeField]
    private float gravity = 9.8f;

    private CharacterController characterController;
    private Vector3 moveDirection = Vector3.zero;

    private void Start()
    {
        characterController = GetComponent<CharacterController>();
    }

    private void Update()
    {
        if (characterController.isGrounded)
        {
            moveDirection = Vector3.right * constantSpeed;
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection = moveDirection * constantSpeed;

            if (Input.GetKeyDown(KeyCode.Space))
            {
                moveDirection.y = jumpForce;
            }
        }

        moveDirection.y = moveDirection.y - (gravity * Time.deltaTime);
        characterController.Move(moveDirection * Time.deltaTime);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...