how can i fix my crafting system

hello ! so i watch some tutorials and i make a basic crafting system

public class CraftableItem : MonoBehaviour
    public int requiredItems;
    public GameObject[] items;
    public Inventory inventory;
    public GameObject FinishItem;

    public void Craft(){
        int InventoryManager = inventory.transform.childCount;
        if(InventoryManager > 0){
            int itemsfound = 0;
            for(int i = 0; i < InventoryManager; i++){
                for(int z = 0; z < requiredItems; z++){
                    if(inventory.transform.GetChild(i).GetComponent<Item>() == items[z]){

            if(itemsfound >= requiredItems){
                Instantiate(FinishItem, transform.position, transform.rotation);




so problem is this tutorial have childCount stuff but i use scriptable object script inventory like this photo and my inspector panel is like this photo i dont understand how can i fix this If I need to explain the purpose of this code If we have a stick object, run the craft() field in our code when we press the craft button.
but the code does not work even though we have a stick object, why? and how do i fix it?

Maybe it’s because in this line:

if(inventory.transform.GetChild(i).GetComponent<Item>() == items[z]) { // do whatever }

You are comparing a Item component with a GameObject. It will never match.
Maybe you should ask something like:

if(inventory.transform.GetChild(i).GetComponent<Item>().item == items[z]) {// do whatever}

But it totally depends on how you have the Intentory set up.

I’ll also suggest to at least invert the for loops to go through Required Items first and then check against Inventory Items because there will usually be less Required items than Inventory Items.