Проблема, связанная с одновременным срабатыванием Input.GetMouseButtonDown() и Button.onClick.AddListener()

Есть скрипт:

    public class CreateObjectScript : MonoBehaviour
{
    public GameObject ObjectToCreate;
    public GameObject SelectedGameObject;
    public bool IsSelectedGameObjectHasObject;
    Ray ray;
    RaycastHit hit;
    public Button CreateButton;
    void Update()
    {
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit))
        {
            var CollideGameObject = hit.transform.gameObject;
            SelectedGameObject.transform.position = CollideGameObject.transform.position  + new Vector3(0f,2f,0f);
        }
        CreateButton.onClick.AddListener(() =>
            {
                if (SelectedGameObject == null)
                {
                    SelectedGameObject = Instantiate(ObjectToCreate, new Vector3(0, 2, 0), new Quaternion());
                }
            });
        if (Input.GetMouseButton(0) && SelectedGameObject != null)
        {
            SelectedGameObject = null;
        }


    }

}

Его задача - по клику на кнопку создаеться новый обьект(помещаеться в SelectedGameObject) и с помощью мыши перемещаеться по уровню. При нажатии на левую кнопку мыши обьект перестаёт двигаться, а SelectedGameObject присваиваеться значение null. Если нажать на кнопку еще раз в то время как SelectedGameObject уже занят новый обьект не должен был создаватьсяю

Проблема в том что я нажимаю на кнопку и в то время того как SelectedGameObject уже следит за мышью, он просто игнорирует то, что SelectedGameObject уже занят, присваивает ему null и создает новый обьект. Как я понял проблема кроеться в одновременном срабатывание Input.GetMouseButtonDown() и Button.onClick.AddListener(). Как заставить работать их раздельно?


Ответы (0 шт):