Есть ли способ разбить этот код Unity 2d на отдельные методы - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь использовать экранные кнопки для перехода вверх и вниз по лестнице. Текущий код отлично работает с клавишами W и S, но я не совсем уверен, как поместить код в отдельные методы, чтобы сенсорный доступ мог это.

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

public void OnTriggerStay2D(Collider2D other)
{
    if (other.tag == "Player" && Input.GetKey(KeyCode.W))
    {
        other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, speed);
    }
    else if (other.tag == "Player" && Input.GetKey(KeyCode.S))
    {
        other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -speed);
    }
    else{
        other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 1);
    }
}

Ответы [ 2 ]

1 голос
/ 20 мая 2019

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

public void OnTriggerStay2D(Collider2D other)
{
    RigidBody2D rigidBody2d =  other.GetComponent<Rigidbody2D>();

    if (other.tag == "Player" && Input.GetKey(KeyCode.W))
    {
        SetVelocity(rigidBody2d, 0, speed);
    }
    else if (other.tag == "Player" && Input.GetKey(KeyCode.S))
    {
        SetVelocity(rigidBody2d, 0, -speed);
    }
    else
    {
        SetVelocity(rigidBody2d, 0, 1f);
    }
}

// public, assuming you want to access this from somewhere else. 
public void SetVelocity(Rigidbody2D rigidBody, float horizontalSpeed, float verticalSpeed)
{
    rigidBody.velocity = new Vector2(horizontalSpeed, verticalSpeed);
}
0 голосов
/ 20 мая 2019

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

Так, например, функция будет выглядеть примерно так:

    public void OnTriggerStay2D(Collider2D other)
    {
        if (other.tag == "Player" && UpKeyPressed)
        {
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, speed);
        }
        else if (other.tag == "Player" && DownKeyPressed)
        {
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, -speed);
        }
        else{
            other.GetComponent<Rigidbody2D>().velocity = new Vector2(0, 1);
        }
    }

Где UpKeyPressed и DownKeyPressed - логические переменные, которые могут быть установлены в true / false, когда вы касаетесь экранных клавиш или любого другого пользовательского интерфейса для сенсорного ввода.

...