Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我在Unity游戏中按空格键太快,对话就会变得杂乱无章_C#_Unity3d - Fatal编程技术网

C# 如果我在Unity游戏中按空格键太快,对话就会变得杂乱无章

C# 如果我在Unity游戏中按空格键太快,对话就会变得杂乱无章,c#,unity3d,C#,Unity3d,我为一个大学项目在Unity中创建了一个小对话场景。角色结束对话后,用户按下空格键进入对话的下一部分。但是,如果用户过快地按下空格键(可能他们想跳过对话),两个字符之间的对话就会变得混乱。我试图实现下面的代码,但是对话的流动性受到了太多的影响 System.Threading.Thread.Sleep(2000) 下面是处理对话的代码。对话本身包含在一个JSON文件中 void Update() { if (Input.GetKeyDown(KeyCode.Space)) {

我为一个大学项目在Unity中创建了一个小对话场景。角色结束对话后,用户按下空格键进入对话的下一部分。但是,如果用户过快地按下空格键(可能他们想跳过对话),两个字符之间的对话就会变得混乱。我试图实现下面的代码,但是对话的流动性受到了太多的影响

System.Threading.Thread.Sleep(2000)
下面是处理对话的代码。对话本身包含在一个JSON文件中

 void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        UpdatePanelState();
    }
}
private void InitialisePanels()
{
    leftPanel.characterIsTalking = true;
    rightPanel.characterIsTalking = false;
    leftCharacterActive = !leftCharacterActive;

    leftPanel.Configure(currentEvent.dialogues[stepIndex]);
    rightPanel.Configure(currentEvent.dialogues[stepIndex + 1]);

    StartCoroutine(MasterManager.animationManager.IntroAnimation());

    stepIndex++;
}

private void ConfigurePanels()
{
    if (leftCharacterActive == true)
    {
        leftPanel.characterIsTalking = true;
        rightPanel.characterIsTalking = false;


        leftPanel.Configure(currentEvent.dialogues[stepIndex]);
        rightPanel.ToggleCharacterMask();
    }
    else
    {
        leftPanel.characterIsTalking = false;
        rightPanel.characterIsTalking = true;

        leftPanel.ToggleCharacterMask();
        rightPanel.Configure(currentEvent.dialogues[stepIndex]);
    }
}

void UpdatePanelState()
{
    if (stepIndex < currentEvent.dialogues.Count)
    {
        ConfigurePanels();

        leftCharacterActive = !leftCharacterActive;
        stepIndex++;
    }
    else
    {
        StartCoroutine(MasterManager.animationManager.ExitAnimation());
    }
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
UpdatePanelState();
}
}
私有无效初始值()
{
leftPanel.com=true;
rightPanel.com=false;
leftCharacterActive=!leftCharacterActive;
Configure(currentEvent.Dialogs[stepIndex]);
配置(currentEvent.Dialogs[stepIndex+1]);
start例程(MasterManager.animationManager.IntroAnimation());
stepIndex++;
}
专用void配置面板()
{
如果(leftCharacterActive==true)
{
leftPanel.com=true;
rightPanel.com=false;
Configure(currentEvent.Dialogs[stepIndex]);
rightPanel.ToggleCharacterMask();
}
其他的
{
leftPanel.com=false;
rightPanel.com=true;
leftPanel.ToggleCharacterMask();
Configure(currentEvent.Dialogs[stepIndex]);
}
}
void UpdatePanelState()
{
if(步骤索引
}

由于在void方法中不能使用yield new return(WaitForSeconds(x))这一事实,我被难住了。我已经包括了一个屏幕截图,如果用户在角色对话结束前过快按下空格键会发生什么

我如何解决这个问题?如果您需要查看更多代码,请告诉我。

--我的理解---

我怀疑这与如何使用stepindex从文件加载有关

按照我的理解,您希望它逐渐从JSON文件加载到文本中,以便显示在窗口中。但当同时请求更多步骤时,就会发生错误

因为这段对话听起来像是两个角色之间的对话,在这两个角色之间有一个来回的对话


---解决办法---

一种解决方案是检查角色当前是否有对话。如果是,并且再次按下空格键,要么什么也不发生,要么会加快对话的速度


你在寻找什么样的解决方案?要在额外点击时快速加载的东西,或者用户必须等待它完成的东西?

为什么不在协同程序中使用
产生新的返回等待秒数(x)
?@ryemos啊,谢谢,没有想到这一点。现在工作正常。如果您仍然需要帮助,请发布面板内容。配置方法除非您知道自己在做什么,否则切勿使用
线程。睡眠