Unity Cant прыгает и движется одновременно

1

Привет и спасибо за это.

Я сделал небольшую игру в Unity, и я наконец получил элементы управления движением с сенсорным входом для работы.

Но сейчас я сталкиваюсь с небольшой проблемой с объединением движения и прыгающей части. Я не могу прыгнуть, если я буду двигаться, НО Я могу двигаться, если я прыгаю.

Каждый из моих клавиш со стрелками содержит скрипт, а затем вызывает сценарий "RobotController", чтобы начать движение.

ArrowRight и ScriptLeft Script. Они выглядят очень похожими, поэтому я буду публиковать только 1:

private RobotController PlayermoveRight;

// Use this for initialization
void Start () {
    PlayermoveRight = GameObject.Find("Player").GetComponent<RobotController>();
}

void OnMouseOver()
{

    if(Input.touchCount >= 1) 
    { 
        var touchr = Input.touches[0];
        if(touchr.phase != TouchPhase.Ended && touchr.phase != TouchPhase.Canceled)
        {
            PlayermoveRight.MoveRight();
        }
        else
        {

        }
    }
}

Сценарий ArrowUp:

void OnMouseOver()
{
    GameObject Go = GameObject.Find("Player");
    if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0))) 
    {
        Go.GetComponent<RobotController>().Jump();
    }
}

И скрипт RobotController:

public double moveTime = 0.1;
public double moveTimeR = 0.1;
private double lastPressedTime = 0.0;
private double PressRight = 0.0;

public void MoveLeft() // If ArrowLeft is clicked or Pressed
{
    lastPressedTime = Time.timeSinceLevelLoad; 
}

public void MoveRight() // If ArrowRight is clicked or Pressed
{
    PressRight = Time.timeSinceLevelLoad;
}



void FixedUpdate () {


    if (PressRight + moveTimeR > Time.timeSinceLevelLoad) 
    {
        rigidbody2D.velocity = new Vector2 (maxSpeed, rigidbody2D.velocity.y);
    } 
    else if (lastPressedTime + moveTime > Time.timeSinceLevelLoad) 
    {
        rigidbody2D.velocity = new Vector2 (maxSpeed - maxSpeed - maxSpeed, rigidbody2D.velocity.y);

    }
    else 
    {
        rigidbody2D.velocity = new Vector2(0.0f, rigidbody2D.velocity.y);
    }

}

public void Jump()
{
    if (isOnGround == true) {
        anim.SetBool("Ground",false);
        rigidbody2D.AddForce (new Vector2 (0, jumpForce));
    }
}

Как я могу это сделать, я могу прыгать и двигаться в одно и то же время?

  • 0
    Я не разработчик Unity, так что просто вопрос: вы уверены, что устройство, которое вы используете, принимает одновременно несколько сенсорных вводов?
  • 1
    Я пробовал на 3 устройствах, и все они должны быть в состоянии принять мультитач-ввод.
Показать ещё 3 комментария
Теги:
unity3d

2 ответа

3
Лучший ответ

из кода со стрелкой вверх:

(Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0))

вы проверяете, только что началось первое касание, если вы удерживаете стрелку перемещения, и вы нажимаете вверх, чтобы прыгать "прыжок", это не первое касание, и первое касание (для движения) не находится в он начал фазу.

Причина, по которой он работает с ударом прыжка, а затем движется, заключается в том, что первым касанием в этом случае является касание перехода (по совпадению, а не по коду).

Вы не хотите проверять первое касание здесь, вы хотите проверить на касание, которое находится над стрелкой вверх.

(не уверен, как вы на самом деле это делаете, но я не могу комментировать, пока не получу 50 rep :()

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню