Unity3d 统一-如何强制下一次输入?

Unity3d 统一-如何强制下一次输入?,unity3d,Unity3d,我正在编写一个战斗菜单,它有一个字符选择面板和一个子菜单面板,你需要按enter键从每个菜单移动到下一个菜单,但是它跳过子菜单直接进入敌人选择,我相信这是因为我的代码保留了输入,那么有没有办法强迫它转到下一个输入并放弃它当前拥有的值呢 public void CursorControl() { 如果(CharacterSelectActive==true) { if(Input.GetKeyDown(KeyCode.Return)) { 对于(int i=0;i

我正在编写一个战斗菜单,它有一个字符选择面板和一个子菜单面板,你需要按enter键从每个菜单移动到下一个菜单,但是它跳过子菜单直接进入敌人选择,我相信这是因为我的代码保留了输入,那么有没有办法强迫它转到下一个输入并放弃它当前拥有的值呢

public void CursorControl()
{
如果(CharacterSelectActive==true)
{
if(Input.GetKeyDown(KeyCode.Return))
{
对于(int i=0;i<(光标位置);i++)
{
MovesPanelCursor.transform.Translate(42f,0.0f,0.0f);
}
光标位置=0;
面板开关();
}
}
如果(MoveSelectActive==true)
{
if(Input.GetKeyDown(KeyCode.Escape))
{
对于(int i=0;i<(光标位置);i++)
{
MovesPanelCursor.transform.Translate(42f,0.0f,0.0f);
}
光标位置=0;
面板开关();
}
if(Input.GetKeyDown(KeyCode.S))
{
光标位置=光标位置+1;
MovesPanelCursor.transform.Translate(-42f,0.0f,0.0f);
Debug.Log(游标位置);
如果(光标位置>3)
{
MovesPanelCursor.transform.Translate(42f,0.0f,0.0f);
光标位置=3;
}
}
if(Input.GetKeyDown(KeyCode.W))
{
游标位置=游标位置-1;
MovesPanelCursor.transform.Translate(42f,0.0f,0.0f);
Debug.Log(游标位置);
如果(光标位置<0)
{
MovesPanelCursor.transform.Translate(-42f,0.0f,0.0f);
光标位置=0;
}
}
if(Input.GetKeyDown(KeyCode.Return))
{
如果(光标位置==0 | |光标位置==-1)
{
攻击();
}
如果(光标位置==1)
{
}
如果(光标位置==2)
{
}
如果(光标位置==3 | |光标位置==4)
{
}
}
}
公用交换机()
{
CharacterPanel.SetActive(真);
MoveSelectActive=!MoveSelectActive;
MovesPanel.SetActive(MoveSelectActive);
}

您能提供您的代码吗?…-- 如果您正在使用检测回车键

if(Input.GetKey(KeyCode.Enter))
{
    // move to next menu
}
当按下回车键时,它将被按下一个以上的游戏画面,因此基本上它将转到您的子菜单,并立即跳转到下一个菜单,而您不是中间的一步,因为该子菜单也检测到按下的回车键

试用

if(Input.GetKeyDown(KeyCode.Enter))
{
    // move to next menu
}
而是“向下”

编辑: 如果“PanelSwitch();”在内部调用CursorControl(),请注意相同的输入仍然有效。在这种情况下,最好只将MoveSelectActive或其他设置为active,然后等待下一个frame Update()重新插入控制器

编辑:

在您的帖子中,MoveSelectActive等变量是非常不独立的,我无法理解它们是用什么初始化的,PanelSwitch()中的状态更改如何影响用户在UI中的选项,以及它们在以下CursorControl()流中的作用


作为提示,我会开始发现流程问题,而不是获取键盘输入。我不太明白“强制下一次输入”的意思,也许你可以澄清一下,我会理解还有更多的问题

PanelSwitch();做什么?请发帖。你确定你想两者都“如果”(CharacterSelectActive==true)和“if(MoveSelectActive==true)”可以执行吗?否则您将需要一个else或一个早期返回。您的retun键只有一堆if语句用于攻击()你是如何使用它来切换面板的?使用我的PanelSwitch方法。小编码技巧-如果你在if语句中检查布尔值,你不需要写“==true”。