- Home /
C# - How do you GetComponent of a child class that inherits from a specific class?
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!
Answer by Lairinus · Oct 08, 2017 at 05:40 AM
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.
Your answer
Follow this Question
Related Questions
Inheritance and using GetComponent 2 Answers
Using GetComponent with a subclass 3 Answers
Inheriting variables from common parent class on two different gameobjects 1 Answer
NullReferenceException. GetComponent dose not work properly 2 Answers
How do I access a script component added to a gameobject from an assembly at run-time 0 Answers