【问题标题】:UDK "Error, Unrecognized member 'OpenMenu' in class 'GameUISceneClient'"UDK“错误,‘GameUISceneClient’类中无法识别的成员‘OpenMenu’”
【发布时间】:2026-01-20 01:55:01
【问题描述】:

编译时出现以下错误:

C:\UDK\UDK-2010-03\Development\Src\FixIt\Classes\ZInteraction.uc(41):错误,“GameUISceneClient”类中无法识别的成员“OpenMenu”

第 41 行如下:

GetSceneClient().OpenMenu("ZInterface.ZNLGWindow");

但是当我搜索OpenMenu时,发现确实是在UDK的GameUISceneClient.uc中定义的:

第 1507 行:执行函数 OpenMenu(string MenuPath, optional int PlayerIndex=INDEX_NONE)

看起来我的一切都是正确的。那么有什么问题呢?为什么找不到 OpenMenu 功能?

【问题讨论】:

    标签: unreal-development-kit unrealscript


    【解决方案1】:

    来自Legacy:Exec Function上的维基页面:

    执行函数是玩家或用户可以通过在控制台中输入其名称来执行的函数。基本上,它们提供了一种在 UnrealScript 代码中定义新控制台命令的方法。

    好的,所以 OpenMenu 已转换为控制台命令。伟大的。但是,我如何在代码中执行它?页面没说!

    更多搜索发现this odd documentation page,其中包含答案:

    那么,还有一个函数 在名为“布尔”的类控制台中 ConsoleCommand(强制字符串 s)'。到 调用你的 exec'd 函数, 'myFunction' 来自代码,你输入:

    * bool isFunctionThere; //optional
      isFunctionThere = ConsoleCommand("myFunction myArgument");
    

    所以,我用以下内容替换了我的行:

    GetSceneClient().ConsoleCommand("OpenMenu ZInterface.ZNLGWindow");
    

    现在这会导致我在my other question+answer a few minutes ago 中介绍的另一个错误。但就是这样!

    【讨论】:

      【解决方案2】:

      不确定这是否是您的意图,但如果您尝试基于已在 UI 编辑器中创建的 Archetype 创建 UIScene,您需要执行以下操作:

      UIScene openedScene;
      UIScene mySceneArchetype;
      
      mySceneArchetype = UIScene'Package.Scene';
      GameSceneClient = class'UIRoot'.static.GetSceneClient();
      
      //Open the Scene
      if( GameSceneClient != none && MySceneArchetype != none )
          {
              GameSceneClient.OpenScene(mySceneArchetype,LocalPlayer(PlayerOwner.Player), openedScene);
          }
      

      【讨论】: