meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| scripting:client:gui [2023/09/09 10:14] – bibiboxs | scripting:client:gui [2025/08/09 20:20] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 2: | 行 2: | ||
| # Client/GUI | # Client/GUI | ||
| - | 在沙盘引擎当前版本GUI系统中,**所有关于UI实例均是基于[FairyGUI框架](https:// | ||
| - | 在此前提下,开发者可**使用【FairyGUI编辑器】进行快速可视化的UI制作**,同时搭配`JavaScript`代码直接操作`FairyGUI对象`以控制UI逻辑。 | ||
| - | 换句话说,沙盘引擎有关GUI部分,除了少数引擎内置代码外(如创建UI),其他代码部分均可通过`FairyGUI`原生代码\函数进行操作和调用。 | + | ## Static Property |
| + | |||
| + | ### GUI.MousePos | ||
| + | |||
| + | > 获取玩家鼠标坐标位置(2D平面坐标)。 | ||
| ```javascript | ```javascript | ||
| - | let gui = GUI.Create(" | + | GUI.MousePos: Vector |
| - | let button = gui.GetChild(" | + | ``` |
| - | button.onClick.Set(() => { // | + | |
| - | | + | |
| - | | + | ### GUI.MouseScroll |
| - | }); | + | |
| + | > 获取玩家**鼠标滚轮滚动偏移量**(自动归0)。 | ||
| + | > | ||
| + | > **(向上 > 0 > 向下 )** | ||
| + | |||
| + | ```javascript | ||
| + | GUI.MouseScroll: | ||
| ``` | ``` | ||
| - | ==**注意:沙盘引擎与`FairyGUI`同样建议使用【1个根组件+N个子组件】的方式进行UI创建,而不是分别在不同位置创建不同的UI小组件。**== | ||
| - | ==**提示:在开始使用GUI相关功能之前,建议优先阅读[《GUI功能参考》](developer/ | ||
| + | ### GUI.FixedMouseScroll | ||
| + | > 获取玩家**鼠标滚轮滚动(修正)偏移量**(自动归0),此属性停留在UI时永远返回`0`(避免误操作)。 | ||
| + | > | ||
| + | > **(向上 > 0 > 向下 )** | ||
| - | ## Property | + | ```javascript |
| + | GUI.FixedMouseScroll: | ||
| + | ``` | ||
| - | ### GUI.MousePos | ||
| - | > 获取当前用户鼠标坐标位置。 | + | |
| + | ### GUI.InputAwayTime | ||
| + | |||
| + | > 获取玩家输入(键盘)空闲时间(玩家在此时间内没有使用键盘)。 | ||
| + | > | ||
| ```javascript | ```javascript | ||
| - | GUI.MousePos: Vector | + | GUI.InputAwayTime: float |
| ``` | ``` | ||
| + | |||
| + | ### GUI.ControlAwayTime | ||
| + | |||
| + | > 获取玩家控制(鼠标)空闲时间(玩家在此时间内没有使用及移动鼠标)。 | ||
| + | |||
| + | ```javascript | ||
| + | GUI.ControlAwayTime: | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ## Property | ||
| ### gui.Package | ### gui.Package | ||
| 行 90: | 行 117: | ||
| ### GUI.Create() | ### GUI.Create() | ||
| - | > 生成一个新的GUI实例。 | + | > 生成一个新的**GUI实例**。 |
| ```javascript | ```javascript | ||
| 行 99: | 行 126: | ||
| // | // | ||
| GUI.Create(" | GUI.Create(" | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetModelPreview() | ||
| + | |||
| + | > 获取指定已导入模型的缩略图(包括外部导入模型),返回类型为FGUI可读的`NTexture`,可供FGUI直接使用。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetModelPreview( model: int ): NTexture | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | let texture = GUI.GetModelPreview(2000); | ||
| + | xxxxx.texture = texture; //FGUI API | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.TextureToUI() | ||
| + | |||
| + | > 将引擎内原生\外部导入的图片转换为FGUI可读类型(`NTexture`)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.TextureToUI( texture: int ): NTexture | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | let texture = GUI.TextureToUI(10000); | ||
| + | xxxxx.texture = texture; //FGUI API | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.RemoveAll() | ||
| + | |||
| + | > 移除并销毁所有GUI实例(`gui.Remove()`)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.RemoveAll() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.WorldPosToUI() | ||
| + | |||
| + | > 获取世界坐标(3D)转换后的UI(2D)坐标。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.WorldPosToUI( worldPos: Vector ): Vector2 | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.PopupMenu() | ||
| + | |||
| + | > 创建弹出菜单(类似右键菜单)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.PopupMenu( data: any ) | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | GUI.PopupMenu( | ||
| + | { | ||
| + | Title: "Test Menu", | ||
| + | Width: 300, | ||
| + | Items: [ | ||
| + | { | ||
| + | Item: "Item 1", | ||
| + | OnClick: () => { | ||
| + | Debug.Log(" | ||
| + | } | ||
| + | }, { | ||
| + | Item: "Item 2", | ||
| + | OnClick: () => { | ||
| + | Debug.Log(" | ||
| + | } | ||
| + | }, { | ||
| + | Item: " | ||
| + | }, { | ||
| + | Item: "Item 3", | ||
| + | OnClick: () => { | ||
| + | Debug.Log(" | ||
| + | } | ||
| + | } | ||
| + | ] | ||
| + | } | ||
| + | ); | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.HidePopup() | ||
| + | |||
| + | > 关闭(隐藏)任何弹出类型的窗口、菜单。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.HidePopup() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetPureMode() | ||
| + | |||
| + | > 设置GUI纯净模式开关(是否渲染UI),此属性可能有助于拍摄模式。 | ||
| + | > | ||
| + | > **注意:此模式同时属于引擎内置功能,玩家可能通过快捷键或`[Esc]`进行开关。** | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetPureMode( active: bool ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetPureMode() | ||
| + | |||
| + | > 获取GUI纯净模式开关。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetPureMode(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetCursor() | ||
| + | |||
| + | > 设置当前使用的光标ID,默认为`0`,具体类型样式参考[《世界资源实例汇总》](reference/ | ||
| + | > | ||
| + | > 每次加载新的世界场景后,光标样式将重置到默认值。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetCursor( cursorID: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetCursor() | ||
| + | |||
| + | > 获取当前使用的光标ID,默认为`0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetCursor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetCursorActive() | ||
| + | |||
| + | > 设置鼠标是否可见,通常游戏时不可见,菜单或需要操作UI时可见。 | ||
| + | > | ||
| + | > 每次加载新的世界场景后,此属性将重置到默认值(可见)。 | ||
| + | > | ||
| + | > 注意:当弹出操作UI时会自动转变为可见状态,开发者无需过多干预这部分逻辑。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetCursorActive( active: bool = true ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetCursorActive() | ||
| + | |||
| + | > 获取鼠标是否可见。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetCursorActive(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetCrosshair() | ||
| + | |||
| + | > 设置准星样式ID,默认`0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetCrosshair( crosshair: int ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetCrosshair() | ||
| + | |||
| + | > 获取准星样式ID。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetCrosshair(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetCrosshairActive() | ||
| + | |||
| + | > 设置准星是否可见,默认`false`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetCrosshairActive( active: bool ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetCrosshairActive() | ||
| + | |||
| + | > 获取准星是否可见。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetCrosshairActive(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetCrosshairColor() | ||
| + | |||
| + | > 设置准星默认颜色,默认`Color(255, | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetCrosshairColor( color: Color ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetCrosshairColor() | ||
| + | |||
| + | > 获取准星默认颜色。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetCrosshairColor(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetCrosshairScale() | ||
| + | |||
| + | > 设置准星默认缩放大小,默认`1.0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetCrosshairScale( scale: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetCrosshairScale() | ||
| + | |||
| + | > 获取准星默认缩放。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetCrosshairScale(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.FocusCrosshair() | ||
| + | |||
| + | > 激活一次准星反馈,例如击中后的动画效果。 | ||
| + | > | ||
| + | > 动画效果会在指定`time`时间后自动复原。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.FocusCrosshair( time: float = 0.5, crosshair: int = -1, scale: float = 1.2, color: Color = Color(255, 255, 255) ) | ||
| + | ``` | ||
| + | |||
| + | - **`time`:**激活一次的动画时间 | ||
| + | - **`crosshair`:**激活时的临时准星ID(默认`-1`,表示使用当前准星) | ||
| + | - **`scale`:**激活时的准星缩放(缩放大小,而非缩放倍数) | ||
| + | - **`color`:**激活时的准星颜色 | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.FocusCrosshairText() | ||
| + | |||
| + | > 激活一次准星文本反馈(准星下方的文本标签)。 | ||
| + | > | ||
| + | > 如果`time`参数填写为0,则表示文本将持续存在,否则将在指定时间内淡出。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.FocusCrosshairText( text: string, time: float = 1.5 ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.IsOccupied() | ||
| + | |||
| + | > 获取当前是否UI界面被占用(使用中)。 | ||
| + | > | ||
| + | > 举例:当界面**主菜单、游戏设置、多人游戏浏览器、NativeMenu**等**优先性界面**正在显示时,此方法将返回`true`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.IsOccupied(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetKey() | ||
| + | |||
| + | > 获取**指定按键**是否正在按住。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetKey( key: string, isForce: bool = false ): bool | ||
| + | ``` | ||
| + | |||
| + | - `isForce`是否强制获取(不考虑UI占用状态) | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetKeyDown() | ||
| + | |||
| + | > 获取**指定按键**是否正在按下。 | ||
| + | > | ||
| + | > 注意:此方法仅在实时帧中有意义,单帧检测应该使用`GetKey()`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetKeyDown( key: string, isForce: bool = false ): bool | ||
| + | ``` | ||
| + | |||
| + | - `isForce`是否强制获取(不考虑UI占用状态) | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetKeyUp() | ||
| + | |||
| + | > 获取**指定按键**是否正在抬起。 | ||
| + | > | ||
| + | > 注意:此方法仅在实时帧中有意义,单帧检测应该使用`GetKey()`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetKeyUp( key: string, isForce: bool = false ): bool | ||
| + | ``` | ||
| + | |||
| + | - `isForce`是否强制获取(不考虑UI占用状态) | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetChatPanelActive() | ||
| + | |||
| + | > 设置游戏聊天框启用开关,当聊天框被禁止后,玩家将无法显示或开启聊天框。 | ||
| + | > | ||
| + | > *此功能主要用于主菜单界面,此时通常不希望玩家使用“聊天”功能,在`Main`场景中是默认被禁止的。* | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetChatPanelActive( active: bool ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetChatPanelActive() | ||
| + | |||
| + | > 获取游戏聊天框开关。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetChatPanelActive(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetChatPanelPivot() | ||
| + | |||
| + | > 设置游戏聊天框锚点位置(强制),默认值为`-1`(遵循游戏默认设置),通过此方法设定位置后,即使玩家在游戏选项设置了锚点位置,也会优先使用当前方法所设置的位置。 | ||
| + | > | ||
| + | > *此功能适用于部分U丰富的模组,可能不希望聊天框占用模组UI位置(例如血条、状态条、信息面板等),可以使用此方法强制设定聊天框位置。* | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetChatPanelPivot( pivot: int = -1 ) | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | GUI.SetChatPanelPivot(-1); | ||
| + | GUI.SetChatPanelPivot(0); | ||
| + | GUI.SetChatPanelPivot(1); | ||
| + | GUI.SetChatPanelPivot(2); | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetChatPanelPivot() | ||
| + | |||
| + | > 获取游戏聊天框锚点位置。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetChatPanelPivot(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.CreateNativeView() | ||
| + | |||
| + | > 打开一个引擎内置UI面板(如设置、服务器列表、MOD管理器等)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.CreateNativeView( int type, Action onDisable = null ) | ||
| + | ``` | ||
| + | |||
| + | | ID | 面板描述 | ||
| + | | ---- | ---------------------- | | ||
| + | | 0 | 开发者界面(关于界面) | | ||
| + | | 1 | 游戏设置 | ||
| + | | 2 | 多人游戏浏览器 | ||
| + | | 4 | ~~MOD模组管理~~ | ||
| + | |||
| + | *尽管有些ID没有被表格记录,但有可能仍然是有内容的,但未被记录的ID通常不具备通用性意义,在打开时将会被引擎阻断。* | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.ExistNativeView() | ||
| + | |||
| + | > 检查某个引擎内置UI界面是否存在(被打开)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.ExistNativeView( type: int ): bool | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.DestroyNativeView() | ||
| + | |||
| + | > 关闭一个引擎内置UI面板。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.DestroyNativeView(type: | ||
| + | // | ||
| + | // | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.BindGameMenuButton() | ||
| + | |||
| + | > 绑定当前场景自定义ESC菜单按钮。 | ||
| + | > | ||
| + | > 此方法适用于对模组主菜单**没有特殊\高级自定义需求**(否则应该考虑使用FairyGUI自制菜单),可以通过此方法**快速**的建立一个**游戏原生主菜单**。 | ||
| + | > | ||
| + | > **注意:此方法通常只需要在主菜单场景执行一次,绑定代码只在当前场景生效,==切换场景后将会自动重置默认绑定==。** | ||
| + | |||
| + | [note2] | ||
| + | |||
| + | 此方法支持绑定内置(宏)按钮,这将直接引用引擎内置按钮(功能及翻译),详情可参考下方表格。 | ||
| + | |||
| + | **如果绑定的是一个内置按钮,则只需要填写参数0即可。** | ||
| + | |||
| + | | 内置按钮(宏) | 说明 | ||
| + | | -------------- | ------------------------------------------------------------ | | ||
| + | | `@default` | ||
| + | | `@space` | ||
| + | | `@options` | ||
| + | | `@multiplayer` | 多人游戏浏览器 | ||
| + | | `@mapeditor` | ||
| + | | `@developers` | ||
| + | | `@native` | ||
| + | | `@quit` | ||
| + | |||
| + | [/note] | ||
| + | |||
| + | [note3] | ||
| + | |||
| + | 注意:当玩家处于非主菜单(初始Main场景)界面时,引擎会自动补充**继续游戏**、**返回主菜单**额外的菜单按钮。 | ||
| + | |||
| + | [/note] | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.BindGameMenuButton( titleOrKey: string, info: string = null, callback: Action = null ) | ||
| + | ``` | ||
| + | |||
| + | 以下是一个示例。 | ||
| + | |||
| + | ```javascript | ||
| + | function OnScriptLoad() | ||
| + | { | ||
| + | //Custom Item | ||
| + | GUI.BindGameMenuButton(" | ||
| + | CreateHost(" | ||
| + | }); | ||
| + | GUI.BindGameMenuButton(" | ||
| + | ConnectHost(" | ||
| + | }); | ||
| + | | ||
| + | //Internal Item | ||
| + | GUI.BindGameMenuButton(" | ||
| + | GUI.BindGameMenuButton(" | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.UnbindAllGameMenuButton() | ||
| + | |||
| + | > 取消绑定所有主菜单界面按钮项目(包括引擎默认按钮)。 | ||
| + | > | ||
| + | > **注意:此方法会清空所有菜单按钮,如果希望重置为默认引擎按钮,应该手动执行一次`BindGameMenuButton(" | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.UnbindAllGameMenuButton() | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetGameMenuTitle() | ||
| + | |||
| + | > 设置游戏菜单**标题文本**(支持宏文本),留空参数则使用默认名称(模组名称)。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetGameMenuTitle( text: string = null ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetGameMenuTitle() | ||
| + | |||
| + | > 获取游戏菜单**标题文本**。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetGameMenuTitle(): | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.SetGameMenuStyle() | ||
| + | |||
| + | > 设置游戏菜单**风格样式**,默认值为`0`。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.SetGameMenuStyle( style: int ) | ||
| + | ``` | ||
| + | |||
| + | | Style | 样式 | ||
| + | | ---------------- | ------------------------------------------------------------ | | ||
| + | | -1==(已过时)== | 隐藏内置游戏菜单,通常配合`FairyGUI`高度自定义使用< | ||
| + | | **0(默认)** | ||
| + | | 1 | 内置风格菜单,但不显示背景图片,直接显示世界相机视角 | ||
| + | |||
| + | |||
| + | |||
| + | ### GUI.GetGameMenuStyle() | ||
| + | |||
| + | > 获取游戏菜单**风格样式**。 | ||
| + | |||
| + | ```javascript | ||
| + | function GUI.GetGameMenuStyle(): | ||
| ``` | ``` | ||
| 行 107: | 行 670: | ||
| ### gui.Remove() | ### gui.Remove() | ||
| - | > 移除并销毁当前GUI实例。 | + | > 移除并销毁当前**GUI实例**。 |
| > | > | ||
| 行 118: | 行 681: | ||
| ### gui.GetChild() | ### gui.GetChild() | ||
| - | > 寻找并获取当前GUI实例的指定子元件(对象),如不存在则返回`null`。 | + | > 寻找并获取当前**GUI实例**的指定子元件(对象),如不存在则返回`null`。 |
| + | > | ||
| + | > 有关**GUI实例**对象(`GUIPanel`),参考[GUI Element](scripting/ | ||
| ```javascript | ```javascript | ||
| - | function gui.GetChild( child: string ): GObject // | + | function gui.GetChild( child: string ): GUIPanel |
| ``` | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| </ | </ | ||