Get reference to dynamically added script
I have a base class called Weapon and several derived classes e.g. Weapon_Rifle, Weapon_Pistol etc.
In another class I need to reference whatever derived class of Weapon exists on the GameObject in question. In pseduocode what I'm trying to do is this:
public class OtherClass : MonoBehaviour
{
public string weaponType;
public SCRIPT_I_WANT_TO_REFERENCE;
void Awake(){
if(weaponType =="Rifle"){
SCRIPT_I_WANT_TO_REFERENCE = GetComponent<Weapon_Rifle>();
} else {
SCRIPT_I_WANT_TO_REFERENCE = GetComponent<Weapon_Pistol>(); // etc etc
}
}
void DoStuff(){
SCRIPT_I_WANT_TO_REFERENCE.ShootWeapon();
}
}
Trouble is of course I can't use a dummy type like Object for the SCRIPT_I_WANT_TO_REFERENCE as the compiler complains where I try to access methods of that script like ShootWeapon().
Any way this can be done?
Many thanks.
I tried to do this a while ago, looked everywhere and either found no answers or solutions far too complicated to be worth while.
The best idea is probably to have an additional class on the rifle, pistol etc called just Weapon so you can always access values within that by name without a problem. Then and can access values from the Weapon script on them when they need too or Weapon can send variables to them.
Thanks. Yeah that's probably the simplest approach, though I have lots of different weapons so managing code would get quite tricky after a while ;) I've started to implement the suggestion made in answer to your linked post - an interface - not too hard to do & it's working quite well so far.
Answer by IgorAherne · Apr 03, 2016 at 05:39 PM
use dummy type like Object, but when you use it, cast it into the required script type.
public Object SCRIPT_I_WANT_TO_REFERENCE;
if(weaponType =="Rifle"){
SCRIPT_I_WANT_TO_REFERENCE = (Object)GetComponent<Weapon_Rifle>();
} else {
SCRIPT_I_WANT_TO_REFERENCE = (Object)GetComponent<Weapon_Pistol>(); // etc etc
}
void DoStuff(){
((Weapon_Pistol)SCRIPT_I_WANT_TO_REFERENCE).ShootWeapon();
}
Thanks. Do you think there is much of a performance hit with the casting? Since it's a shooting script for an action game the methods will get called very frequently.
absolutely no performance hit ) It's totally negligible when compared with things like GetComponent performance.
Your answer
Follow this Question
Related Questions
MonoDevelop Unity API reference function with wrong path. How to Fix it? 1 Answer
Recursive SetParent not working 1 Answer
Waring, using new keyword on monovehaviour. When im not using monobehaviour!? 1 Answer
How to Fix this issue 1 Answer
Script execution order of child and parent classes - Parent then children??? 1 Answer