- Home /
Cleaning up my item script... Passing script name to function?
I have written a script for items the player can pick up and use. Each item has a host of different stats and functions associated with it, all in all there are over 100 different items, including 20 guns, 20 spells, healing items, and so on.
The item script is attached to a generic gameobject and the type of item itself can be chosen by drop-down lists inside the inspector.
Now comes the part I try to improve: As it is now, the script checks which specific item has been chosen, then goes to a global "ambientObject" and fills in all item stats with the hardcoded stats from the corresponding itemtype script that is part of the ambientObject. This means I have to have all item scripts declared as well as having to use seperate functions for every item type.
var ambientObject : GameObject;
ambientObject = GameObject.Find("Ambient").gameObject;
var ItemAppleScript : ItemApple;
ItemAppleScript = ambientObject.GetComponent(ItemApple);
var ItemName : String;
var ItemInfo : String;
var HealingType : HealingTypeEnum;
enum HealingTypeEnum
{
None_SelectHealing, //0
Apple //1
}
var ItemType : ItemTypeEnum; // the item category
enum ItemTypeEnum { None,//0 Gun,//1 Healing//2 }
function Start ()
{
if(HealingType != 0)
{
ItemType = 2;
if(HealingType == 1){Apple();}
}
}
function Apple()
{
ItemName = ItemAppleScript.ItemName;
ItemInfo = ItemAppleScript.ItemInfo;
}
It soon becomes extremely cumbersome with the bumber of variables and items that need to be assigned.
I am trying to just call one "AssignItemStats" function that gets passed a scriptname that corresponds to the chosen item, but I have no idea how to do this because from what I understand variables that are scripts have to have their type declared as the script name, and since every hardcoded item stat script has a different name I can'T do it this way.
Here's how I had hoped it would work:
var ItemScript : MonoBehavior; (or whatever)
if(HealingType != 0)
{
ItemType = 2;
if(HealingType == 1)
{
AssignItemStats(ambientObject.GetComponent(ItemApple)); //the ItemApple script stores all variables for the apple item
}
}
function AssignItemStats(ItemScript)
{
ItemName = ItemScript.ItemName;
ItemInfo = ItemScript.ItemInfo;
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613103757im_/https://answers.unity.com/themes/thub/images/avi.jpg)