首页 > 解决方案 > 具有不同数量参数的回调

问题描述

我正在开发一个有对话的游戏(在 Unity 中),有时玩家需要根据对话或他们正在交谈的人的类型来选择一个选项。根据玩家的选择,游戏需要调用一个方法,但根据场景的不同,回调方法可能有参数,有时它可能没有任何参数。例如,如果给他们一个任务,他们会看到“接受”或“拒绝”选项。接受需要调用 AcceptQuest(Quest quest),拒绝需要调用 RefuseQuest()。

现在,我让它将一组 Action 委托传递给启动对话框方法,该方法设置全局 Action 数组,然后玩家单击的按钮调用关联的回调。

所以玩家会发起与店主的对话:

public void Interact(Action[] actDialogOptions)
{
    DialogManager.instance.ShowDialog(npcDialog, actDialogOptions);
}   

这将启动对话框:

Action[] actDialogOptions; //Allows the button to grab the correct delegate

public void StartDialog(string[] dialogLines, Action[] actPassedDialogOptions)
{        
    //Code to Display the text
   
    actDialogOptions = actPassedDialogOptions
}

//Method mapped to one of the buttons
public void DialogOption1Clicked()
{
    actDialogOptions[0]?.Invoke();
}

//Method mapped to one of the buttons
public void DialogOption2Clicked()
{
    actDialogOptions[1]?.Invoke();
}

我想像这样调用 Interact 方法,但显然我不能:

public void TalkToNPC()
{
    actDialogOptions = new Action[] { AcceptQuest, RefuseQuest };
    Interact(actDialogOptions);
}

public void AcceptQuest(Quest quest)
{
    //Code to accept
}

public void RefuseQuest()
{
    //Code to Refuse
}

那么我该怎么做呢?

标签: c#unity3ddelegates

解决方案


推荐阅读