Для перемещения персонажа есть 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 Если у вас остались вопросы, задавайте их. Отвечу точно :)