c# - 具有不同数量参数的回调
问题描述
我正在开发一个有对话的游戏(在 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
}
那么我该怎么做呢?
解决方案
推荐阅读
- python - 为什么在 SQL 注入攻击中使用 " 而不是 ' 时结果不同?
- python - 带有css和javascript的Django静态文件夹不会加载
- node.js - MongoDB/javascript 在数组中使用数组
- javascript - React js textarea onchange不适用于值
- scala - Scala DataFrame - 如何仅打印具有最大值的行
- php - 不持久化数据的表单 Symfony 5
- python - ValueError:检查目标时出错:预期dense_16的形状为(1,)但得到的数组形状为(30,)
- android - 为什么根元素的布局属性没有膨胀?
- javascript - 显示与父元素具有相同类名的html子元素并隐藏其他元素
- java - JavaFX 形状没有出现?