ScriptableObject error with Inheritance

here is the error i recieve:
alt text

the error is on this line.:

if (pItem.isStackable)
{
}

I should note that the error only occurs when I build the game. It does not occur when I run the game in the editor.

I believe the error comes from trying to give the player a weapon in their inventory.

because this runs fine:

Player.playerInv.AddItem(apple);

and this doesn’t:

 Player.playerInv.AddItem(sword2);

the only difference is apple is an item and Sword2 is a weapon…
I have reason to believe that the build is expecting an Item to be loaded and not a weapon. (Weapon is a child of item. item inherits ScriptableObject).

here is the code for weapons and items (sorry for large file):

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


[CreateAssetMenu(fileName = "Item", menuName = "StrangeEngine/Item", order = 2)]
public class Item : ScriptableObject
{
    public enum ItemType
    {
        Item = 1,
        Skill = 2,
        Equipment = 3
    }
    public ItemType type;
    public int ID;
    public string itemName;
    public string info;
    public int worth;
    public bool isStackable = false;
    //public Sprite icon;
    public Dictionary<string, int> itemStats = new Dictionary<string, int>(); // "stats" that come in pairs, a name (string) and a number. for example ("weight", 22)

    public Item(ItemType pType, int pID, string pName, string pInfo, int pWorth, Dictionary<string,int> pStats)
    {
        type = pType;
        ID = pID;
        itemName = pName;
        info = pInfo;
        worth = pWorth;
        itemStats = pStats;
    }
    public Item(ItemType pType, int pID, string pName, string pInfo, int pWorth, Dictionary<string, int> pStats, bool pIsStackable)
    {
        type = pType;
        ID = pID;
        itemName = pName;
        info = pInfo;
        worth = pWorth;
        itemStats = pStats;
        isStackable = pIsStackable;
    }
}

[CreateAssetMenu(fileName = "Item", menuName = "StrangeEngine/Weapon", order = 3)]
public class Weapon : Item
{
    public int Damage;
    public GameObject WeaponModelPrefab;


    public Weapon(int pID, string pName, string pInfo, int pWorth, Dictionary<string, int> pStatsfloat, int pDamage, GameObject pWeaponPrefab) : base(ItemType.Equipment,pID, pName, pInfo,pWorth,pStatsfloat)
    {
        Damage = pDamage;
        WeaponModelPrefab = pWeaponPrefab;
    }
}

Both ScriptableObjects and MonoBehaviours are required to exist within files that have the filename matching the class name. Given that both of these look like they’re in a single file, I’m guessing there’s an issue with one of them.

This took me ages to debug the first time I ran into this!

I made an identical post here once this post went stale:
https://stackoverflow.com/questions/64780739/scriptableobject-build-error-with-inheritance-but-runs-fine-in-unity-editor


it turns out I was running some old code by accident. the constructors in both Item and Weapon were completely unnecessary.

in the other thread, I found out that constructors don’t work well with scripts inheriting ScriptableObject, because unity handles the construction of a scriptable object for you… my constructors managed to interfere with that. luckily I didn’t need the constructors anyway and left them there by accident. after removing them, the code worked fine,