- Home /
Check if gameobject has script with inheritance
Hello to you all,
I am scripting in C# and I would like to know how to check if some GameObject has a certain script bound to it and if this script class inherits from a certain script class.
I used :
if((object as GameObject).GetComponent("BaseObject") != null){
Which would give me the ability to check if "object" has the BaseObject script bound to it.
But now, I want to detect if "object" has a script bound to it which inherits from BaseObject. As an example, I have two others scripts Sword and FireSpellBook which inherits like this :
public class Sword : BaseObject {
and
public class FireSpellBook : BaseObject {
How can I detect that "object" is a BaseObject, given that it can be a Sword or a FireSpellBook ?
Thank you guys for your answers :)
Answer by zaneev10 · May 23, 2014 at 10:02 PM
I think what you are looking for is:
if(gameObject.GetComponent<Sword>().GetType().IsSubclassOf(typeof(BaseObject)))
However, I'm not sure this is the best solution to what you are doing. I don't know the structure of your project, but good use of overloaded methods, interfaces, and managers should prevent the need for this kind of check. That is just my two cents.
Either way, good luck.
Answer by fafase · May 23, 2014 at 09:00 PM
If you do
GetComponent<AnyClass>();
you get a reference to that object so in your case it is BaseObject. This reference will be aware only of BaseObject members and not what is in sub classes which makes sense.
Nonetheless if you have a virtual method on BaseObject that is overriden in a subclass then the overriden version is called as the compiler will go down the virtual table to find the final implementation of the virtual method. If none is given then it calls it in BaseObject.