Как переместить объект в указанное c место с помощью кнопки в Unity? - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в Unity и в настоящее время использую Unity2D. Я хочу сделать так, чтобы при нажатии кнопки объект перемещался в определенное c место. В настоящее время я использую:

public class MoveCard : MonoBehaviour
{
    public float speed = 20f;
    public Rigidbody2D rb;
    public Vector2 pos = new Vector2(5,1);

    void Update(){

    }

void CardMovement(){
    rb.MovePosition(pos * speed * Time.deltaTime);
    }
}

Я хочу, чтобы функция CardMovement запускалась, когда я нажимаю кнопку, но она не отображается в инспекторе кнопок, и я не знаю, как ссылаться на Rigidbody2D в кнопка. Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 07 мая 2020

В инспекторе в меню кнопок «OnClickEvent» нажмите кнопку «плюс», перетащите объект, содержащий компонент «MoveCard». В раскрывающемся списке справа найдите метод CardMovement. Просто отметьте в вашем текущем коде, который вы настроили, поэтому, если вы нажмете кнопку, он переместит движение только на один кадр. Вы можете изменить что-то вроде этого:

public class MoveCard : MonoBehaviour
{
    public float speed = 20f;
    public Rigidbody2D rb;
    public Vector2 pos = new Vector2(5,1);
    public bool moving = false;

    void Update(){
    if (moving) {
    rb.MovePosition(pos * speed * Time.deltaTime);
    }
    }

void CardMovement(){
    moving = true;
    }
}

edit (все еще неплохая идея):

//..
void FixedUpdate()
{
    if (moving) {
    rb.MovePosition(pos * Time.fixedDeltaTime);
    }
}
//..

edit edit: установить isKinemati c в значение true на жестком корпусе

0 голосов
/ 09 мая 2020

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

0 голосов
/ 07 мая 2020

Функция, которую вызывает ваша кнопка, должна быть publi c.

public void CardMovement(){
rb.MovePosition(pos * speed * Time.deltaTime);
}

}

После ее изменения снова назначьте объект, содержащий сценарий, и попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...