Поведение касания не ведет себя так же, как нажатие клавиш A и D - PullRequest
0 голосов
/ 17 февраля 2020

так что у меня есть эта игра, в которой вы перемещаете машину влево и вправо с помощью «A» и «D». Для этого я использую следующий код: нажмите «A»:

characterBody.AddForce(-moveSpeed, 0, 0, ForceMode.Impulse);

, нажмите «D»:

characterBody.AddForce(moveSpeed, 0, 0, ForceMode.Impulse);

Я сейчас пытаюсь перенести эту игру на мобильный, используя касание с обеих сторон экрана. Вот мой код для этого, использующий те же понятия:

void Update()
{
    int i = 0;
    //loop over every touch found
    while (i*2 < Input.touchCount)
    {
        if (Input.GetTouch(i).position.x > ScreenWidth / 2)
        {
            //move right
            //RunCharacter(1.0f);
            characterBody.velocity = Vector3.zero;

            characterBody.AddForce(moveSpeed, 0, 0, ForceMode.Impulse);
        }
        if (Input.GetTouch(i).position.x < ScreenWidth / 2)
        {
            //move left
            //RunCharacter(-1.0f);
            characterBody.velocity = Vector3.zero;
            characterBody.AddForce(-moveSpeed, 0, 0, ForceMode.Impulse);
        }
        ++i;
    }
}

Когда я делаю этот код, независимо от того, насколько высоким или низким я установил переменную moveSpeed, он не будет иметь такого же эффекта. Вот что происходит с клавишами со стрелками / «A» и «D»: https://infinitecarspeeder.netlify.com. Я хочу, чтобы он имел такой эффект, но, тем не менее, он не имеет эффекта ForceMode.Impulse и очень медленно переключает направления. Большое спасибо!

РЕДАКТИРОВАТЬ:

Вот мой код, который я использую для перемещения клавиатуры (работает отлично):

void FixedUpdate(){
    transform.Translate (Vector3.forward * Time.deltaTime * forwardSpeed);
    if(Input.GetKey(KeyCode.A)||Input.GetKey(KeyCode.LeftArrow)){

        MoveLeft();
    }
    if(Input.GetKey(KeyCode.D)||Input.GetKey(KeyCode.RightArrow)){

        MoveRight();
    }
}

public void MoveLeft()
{

    rb.AddForce(-10.75f, 0, 0, ForceMode.Impulse);
}
public void MoveRight()
{

    rb.AddForce(10.75f, 0, 0, ForceMode.Impulse);
}

1 Ответ

1 голос
/ 17 февраля 2020

При использовании клавиатуры вы сбрасываете скорость символа на 0? Это может изменить ваши чувства, если вы этого не сделаете. Если вы сбрасываете скорость до нуля при каждом обновлении, максимальная скорость, с которой автомобиль может двигаться, равна 1,0f, поскольку он не может ускоряться. Если вы этого не сделаете, автомобиль может двигаться быстрее, чем только 1.0f, что объясняет разницу в скорости.

...