Allow me to explain what I mean.
I have a base parent class called Item.cs
And all the items’ scripts inherit from that one base class.
So if I wanted to get that specific child script as a component, how is that possible?
I want this to be dynamic so I can’t type specific names/scripts
Thanks for your time!
I think this answers what you mean. The short and painless answer to getting a specific child script by its’ type dynamically without actually searching for its’ type is… you can’t. However, you don’t need to do this.
Virtual and Abstract:
Virtual and Abstract can be used to make a method in the base script behave differently in a child script. The great thing about this is that say for example we have a script, “Sword,” that is a child of “Item.” We can get the sword as type “item” and call its’ function “sword.Equip()” that we defined in the “Sword” script. See here for a little more detail
Time for some pseudo-code, as this concept took some time for me to understand:
public class Item
{
public virtual void Equip()
{
Debug.Log("Equipped an item.");
}
}
public class Sword: Item
{
public string swordName = "Sword of Death";
public override void Equip()
{
base.Equip(); // This is not necessary, but it calls the Item.Equip() function as-is, in case you need it
Debug.Log("Equipped item name is " + swordName");
}
}
void EquipHoveredItem(GameObject hoveredItem)
{
Item item = hoveredItem.GetComponent<Item>();
if (item != null)
{
item.Equip(); // Debugs "Equipped an item." "Equipped item name is Sword of Death"
}
}
Now, if you wanted to get specific properties from one of your children script, then I would just put the property on your parent script. That way each item will have the property, but whether or not it is used depends on the item.