как запрограммировать проигрыватель для перехода на сенсорный экран мобильного устройства с помощью кнопки пользовательского интерфейса - PullRequest
0 голосов
/ 01 августа 2020

Мне было интересно, как заставить моего игрока двигаться, когда я нажимаю кнопку пользовательского интерфейса в Unity 2D. Я больше запутался в том, как закодировать кнопку пользовательского интерфейса для получения ввода и перемещения игрока, пока кнопка пользовательского интерфейса не будет нажата, но все равно был бы счастлив, если бы кто-то мог помочь с перемещением, но кнопка более важна. Я кодирую c#

Я хочу, чтобы он работал примерно так, но, очевидно, это просто дрянной псевдокод:

publi c void whenClicked (); { если (нажата кнопка leftButton) переместить игрока влево

если (нажата кнопка rightButton) переместить игрока вправо

если (нажата кнопка upButton) переместить игрока прыгать }

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Для перемещения персонажа есть 2 основных способа: перемещение с помощью компонента Transform (поскольку у вас есть 2D-игра, у вас, скорее всего, есть RectTransform на персонаже) и с помощью компонента Rigidbody.

TRANSFORM: скрипт на вашей кнопке должен выглядеть итак:

public GameObject character; // The link to the character you want to move
private bool doMove; // whether the character must move or not
public float speed;

private void OnMouseDown () {
    doMove = true;
}
private void Update () {
    if (doMove) {
        character.transform.Translate(Vector3.right * Time.deltaTime * speed);
    }
}

Он движется вправо. Вы также можете использовать Vector3.up, Vector3.left, Vector3.down, Vector3.forward, Vector3.back Поэкспериментируйте с переменной скоростью, и вы получите то, что хотите.

Но здесь у меня есть вопрос. Я только что видел, что в своем вопросе вы пишете, что используете кнопку пользовательского интерфейса. Вы имеете в виду изображение с BoxCollider или буквально GameObject с компонентом Button. Если это второй, я рекомендую вам удалить компонент Button из ваших button_objects, потому что достаточно скрипта с функцией OnMouseDown. Этот скрипт необходимо добавить ко всем вашим кнопкам (вверх, вправо ...). Также вы должны добавить следующие строки в свой код:

public Vector3 direction;

// and also edit Update function this way:
    if (doMove) {
        character.transform.Translate(direction * Time.deltaTime * speed);
    }

Затем в Unity установите следующие параметры в этом скрипте:

Для направления кнопки вверх = x = 0, y = 1, z = 0
Для направления вниз кнопки = x = 0, y = -1, z = 0
Для направления кнопки вправо = x = 1, y = 1, z = 0
Для кнопки влево direction = x = -1, y = 1, z = 0

Таким образом, каждая кнопка будет перемещать персонажа в своем собственном направлении;

А как насчет жесткого тела. Если вы его используете, вы можете сделать то же самое, но заменить функцию transform.Translate на GetComponent (). AddForce (Vector3.right * speed, ForceMode2D.Impulse) ; Но лично я считаю, что с помощью Transform перемещаться проще

PS Я трачу много времени, отвечая на ваш вопрос, создал новый проект Unity, чтобы проверить то, что я написал, поэтому, пожалуйста, примите мой ответ, нажав галочку и поставьте вроде ко всем моим комментариям. Это поднимает мою репутацию и открывает для меня новые возможности на форуме, а также увеличивает мой интерес к дальнейшей помощи вам :))) PPS Если у вас остались вопросы, задавайте их. Отвечу точно :)

0 голосов
/ 01 августа 2020

Вы можете добавить Component BoxCollider2D к своему объекту и написать функцию

OnMouseDown(){} // calls one frame when there was touch of boxcollider
OnMouseDrag(){} // calls every frame when there is touch of boxcollider
OnMouseUP(){} // calls one framу when there touch of boxcollider was stopped

Эта функция отлично работает не только в P C, но и на Android тоже.

...