2016-02-11 55 views
0

我正在使用Unity3D並嘗試實現以下功能。 我想在該類中存儲一些參數以及「特殊規則」 - 哪些是這個或其他類中的函數。Unity3D,C#:將函數名稱保存爲變量

理想我想的東西,行爲是這樣的:我知道我可以specialRule保存爲一個字符串,並使用反射

public class Weapon 
{ 
    public DamageHandler damageHandler; //script that have all special rule functions 
    public string weaponName; 
    public int damage; 
    public ???? specialRule; //this is the rule of interest 

    public void DealDamage() 
    { 
     damageHandler = GetComponent<DamageHandler>(); 
     damageHandler.specialRule(damage); //call the function that is set in Weapon Class 
    }   
} 

。有沒有其他方式/更好的方法來處理這種情況?

回答

4

你在找什麼是我的朋友Action<int>

public class Weapon 
{ 
    public DamageHandler damageHandler; //script that have all special rule functions 
    public string weaponName; 
    public int damage; 
    public Action<int> specialRule; //this is the rule of interest 

    public void DealDamage() 
    { 
     damageHandler = GetComponent<DamageHandler>(); 
     damageHandler.specialRule(damage); //I call the function with the name that is set in Weapon Class 
    }   
} 

Action<ParamType1, ParamType2, ParamType3, .....>表示void功能委託。

Func<ParamType1, ParamType2, ParamType3, ....., ReturnType>表示與返回值

每個人都可以從1個或2個類型參數的任何地方拍攝功能,我相信大約17個左右

+0

非常感謝您! – Alex

+0

這裏是一個壯觀的相關答案... http://stackoverflow.com/a/35343428/294884 – Fattie

相關問題