我正在为GUI系统开发可重用的库,我想将回调发送到静态方法,该方法显示模式对话框。 Pseudo-ish,我想做这样的事情:
void OnQuitButtonClick()
{
var buttons = new OrderedDictionary();
buttons.Add( "OK", (Action)(() => { Debug.Log("OK was pressed!"); }) );
buttons.Add( "Cancel", (Action)(() => { Debug.Log("Cancel was pressed!"); }) );
DialogBox.Show(
"Do you really want to quit?",
buttons
);
}
然后,在DialogBox类中:
public static Show(string message, OrderedDictionary buttons)
{
foreach (DictionaryEntry de in buttons)
{
var button = ...; // Instantiate the button object here.
button.GetComponent<Button>().onClick.AddListener( () => { de.Value; Close(); } );
}
}
void Close()
{
Destroy(gameObject); // Destroys "self".
}
这不起作用,但这是我设法谷歌/阅读的方式,我觉得我非常接近。
任何关于如何进步的想法,也许会让它更漂亮一点,我们将不胜感激!
谢谢!
答案 0 :(得分:0)
您实际上并未执行按钮处理程序代码。你可能想要改变这个
button.GetComponent<Button>().onClick.AddListener( () => { de.Value; Close(); } );
到这个
button.GetComponent<Button>().onClick.AddListener( () => {
((Action)de.Value).Invoke();
Close();
});