Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GetComponent requires that the requested component 'Button' derives from MonoBehaviour or Component or is an interface

I've lost all hope, almost. What im trying to do is basically instantiate a prefab I have which is basically a button with an image, and once instantiated, I want to set a onClick function to be called, but it keeps telling me this error:

GetComponent requires that the requested component 'Button' derives from MonoBehaviour or Component or is an interface

I dont understand what im doing wrong, here is my code:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;

public class InventoryCoordinator : MonoBehaviour
{
    // Start is called before the first frame update
    public GameObject prefabPocion;
    void Start()
    {
        GameObject panelInventuario = GameObject.FindGameObjectWithTag("Hotbar");
        if (panelInventuario)
        {
            GameObject primerSlot = panelInventuario.transform.GetChild(0).gameObject;
            GameObject segundoSlot = panelInventuario.transform.GetChild(1).gameObject;
            GameObject tercerSlot = panelInventuario.transform.GetChild(2).gameObject;
            var newPocion = Instantiate(this.prefabPocion, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity);
            this.SetAndStretchToParentSize((UnityEngine.RectTransform)newPocion.transform.transform, (UnityEngine.RectTransform)primerSlot.transform.transform);
            var button = GameObject.FindWithTag("PotionFreeze").gameObject.GetComponent<Button>();
            button.clicked += manguito;
            //newPocion.transform.parent = primerSlot.transform;
        }
    }

    // Update is called once per frame
    void Update()
    {

    }

    public void manguito()
    {
        Debug.Log("full maracaton");
    }

    public void SetAndStretchToParentSize(UnityEngine.RectTransform _mRect, UnityEngine.RectTransform _parent)
    {
        _mRect.anchoredPosition = _parent.position;
        _mRect.anchorMin = new Vector2(1, 0);
        _mRect.anchorMax = new Vector2(0, 1);
        _mRect.pivot = new Vector2(0.5f, 0.5f);
        _mRect.sizeDelta = _parent.rect.size;
        _mRect.transform.SetParent(_parent);
        _mRect.localScale = new Vector3(1f, 1f, 1f);
    }
}

I've tried to get the gameObject and cast it, backwards and forwards, and nothing, I need your help guys! Thanks in advance

like image 539
Jarvan Jarvencio Avatar asked Oct 29 '25 10:10

Jarvan Jarvencio


1 Answers

You have this issue because you're using Button from UnityEngine.UIElements, which afaik doesn't support ingame buttons yet (it's for custom editors usage). Use UnityEngine.UI instead, and replace:

button.clicked += manguito;

with

button.onClick.AddListener(manguito);
like image 78
BFyre Avatar answered Nov 01 '25 01:11

BFyre



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!