Как сделать объект Unity UI перетаскиваемым, когда объекты создаются во время выполнения?

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

    public void OnDrag(){
    btn.transform.position = Input.mousePosition;
}
public void EndDrag(){
    if (btn.transform.position.x -500 <50 || btn.transform.position.x -500 > -50) {
        //btn.transform.position = new Vector3 (-10, 10);
        rt.anchoredPosition = new Vector3 (500, 100, 0);
    }
    else{
        rt.anchoredPosition = new Vector3 (-10, -10, 0);
    }
}

1 ответ

Решение

Когда вы создаете объект GameObject, выполните:

obj.addComponent("YourScript");

где YourScript - это сценарий, который вы написали и который прикреплен к GameObjects, делает его перетаскиваемым.

В качестве альтернативы, вы создаете экземпляр префаба, прикрепляете скрипт к префабу через редактор.

Это предпочтительнее, потому что addComponent() устареет в следующих версиях.

Я также рекомендую сохранить List<YourInstantiatedObjectType> в родительском.

Другие вопросы по тегам