Unigine update()和flush()和render()的区别

本文深入探讨了世界脚本中的关键函数,如init()、update()、flush()和render(),解释了它们在游戏开发中的作用,包括对象创建、资源管理、物理模拟和图形渲染。

world脚本具有许多用于编写应用程序逻辑的函数。世界脚本(init())的初始化函数用于创建对象并初始化世界负载上的所有其他必要资源。卸载世界时调用关闭函数(shutdown()),用于删除在脚本执行期间创建的资源以避免内存泄漏。

但是逐帧更新怎么样?在世界脚本中有三个块:

  • update()中你可以放置任何逻辑:控制在屏幕上呈现的内容以及如何操作,渲染到纹理,创建节点,调用控制台命令等等
  • flush()中,您可以模拟物理:执行连续操作(根据当前电机的RPM推动汽车前进,模拟持续吹风,立即执行碰撞响应等)。
  • render()中,您可以根据同一帧中更新的节点状态来纠正行为

Update()

在世界脚本update()中,您可以在应用程序执行时将每个框架都调用所有函数。它用于实现任何逻辑。简而言之,您可以在update()中控制很多事情(无论是否与图形相关。在这里你可以:

注意

不要在更新()中对刚体施加扭矩。否则,您将获得随每个渲染帧而变化的不稳定结果。所有连续操作必须在flush()内

World Callbacks

update()中设置的回调(例如,通过使用WorldTrigger小部件回调)不会立即执行。它们将仅在调用下一个引擎函数时运行:即,在flush()之前,如果有(在当前帧中),或在下一次更新之前()(在下一帧中) - 无论先发生什么。

flush()

world脚本的flush()函数用于控制应用程序中的物理。此功能应用于连续操作,例如根据当前电机的RPM推动汽车前进,模拟持续吹风,执行即时碰撞响应(因为在单个渲染帧期间可以多次执行flush(),您可以处理多次反弹对象,当它们相互碰撞并监视它们时,update()只显示最终结果)等等。因此,在flush()中你可以:

 

注意对于flush()中可以做什么,有一些限制。由于主循环在刷新调用期间访问节点列表及其转换数据,因此您无法执行以下操作

  • 如果启用了节点,请重新定位和转换节点。
  • 创建新节点。
  • 删除节点。

这些操作可能违反正在进行的渲染过程。

Physics Callbacks

就像update()一样,如果在flush()中设置任何基于物理的回调或使用PhysicalTrigger,它们就不能立即执行,因为渲染过程已经在运行并且它们可以违反它。如果还有一个物理迭代要去,它们会在下一个flush()之前执行; 如果没有,则在下一个世界脚本update()之前

如果要重新定位或转换,创建或删除物理回调返回的节点,工作流程如下:将它们存储在数组中,然后在update()中执行所有必要的操作。

代码渲染()

世界脚本的render()函数是用于在节点状态更新后纠正行为的附加函数(例如,已在当前帧中播放蒙皮动画或粒子系统已生成其粒子)。

想象一下,当我们需要将一个对象(比方说,一把剑)附加到蒙皮网格角色的手上时。如果我们在update()函数中转换角色手骨并将其设置为剑,则附件将是松散的而不是精确的。剑不会紧紧握在手中,因为动画实际上是在执行了世界脚本update()之后播放的。这意味着,update()中返回的骨骼转换将用于前一帧。播放动画后执行世界脚本render(),这意味着您可以在此函数中获取当前帧的更新骨骼变换并将其设置为剑。

注意

使用render()仅用于更正目的; 否则,这将增加主循环时间。所有其他函数应放在update()flush()(physics)中。

<think>我们正在讨论Unigine EditorUnigine SDK Browser的区别。根据引用[1]中提到的内容,用户更关注实际工作中常用的对象(如engine.controls, engine.editor, engine.gui),但问题本身是关于两个工具的区别。因此,我们需要从工具的功能定位出发进行解释。 核心区别: 1. Unigine SDK Browser:是项目管理启动器,负责创建、配置、启动项目,以及管理不同版本的Unigine引擎。 2. Unigine Editor:是场景编辑器,用于构建3D场景、编辑材质、设置光照、放置物体等。 详细说明: ### Unigine SDK Browser - **功能定位**:作为项目入口,用于管理多个Unigine项目以及不同版本的SDK。它可以创建新项目、打开已有项目、设置项目参数(如渲染API、窗口模式等)以及启动项目(运行或编辑模式)。 - **使用场景**: - 创建新项目时选择模板(如Empty、VR、Simulation等)。 - 切换项目使用的Unigine引擎版本。 - 配置项目启动参数(如分辨率、全屏模式、控制台开启等)。 - 启动项目(运行模式)或启动编辑器(编辑模式)。 - 引用[1]中提到的`engine`对象是在项目运行时通过脚本访问的,而SDK Browser本身并不直接用于编写代码或编辑场景。 ### Unigine Editor - **功能定位**:是一个功能强大的3D场景编辑器,用于构建编辑虚拟场景。它提供了图形化界面来操作场景中的对象(如节点、灯光、材质、地形等)。 - **使用场景**: - 场景搭建:通过编辑器拖放方式添加调整3D模型、灯光、特效等。 - 资源管理:导入管理纹理、模型、声音等资源。 - 材质编辑:使用可视化材质编辑器创建修改材质。 - 脚本集成:将逻辑脚本(如WorldLogic)附加到节点上,实现交互功能。 - 物理碰撞设置:配置物体的物理属性碰撞形状。 - 运行测试:在编辑器中直接运行场景进行测试(Play模式)。 ### 工作流程关系 1. 使用SDK Browser创建项目(例如选择“Empty”模板)。 2. 在SDK Browser中点击“Edit”按钮启动Unigine Editor(此时编辑器会加载该项目)。 3. 在Unigine Editor中构建场景、添加逻辑、配置资源等。 4. 编辑完成后,可以通过编辑器内的“Play”按钮测试场景,或返回SDK Browser点击“Run”运行项目(此时以独立应用形式运行)。 ### 总结对比表 | 功能 | Unigine SDK Browser | Unigine Editor | |------------------------|-----------------------------------------|-----------------------------------------| | **核心用途** | 项目管理、版本控制、启动配置 | 场景编辑、资源管理、实时测试 | | **是否编辑场景** | 否 | 是 | | **是否管理多个项目** | 是 | 否(一次只编辑一个项目) | | **是否配置启动参数** | 是 | 否(但可在运行时调整部分参数) | | **是否直接编写代码** | 否(但可启动外部IDE) | 否(但可附加脚本并打开外部IDE) | | **图形界面** | 简单的项目列表配置选项 | 复杂的3D场景编辑界面(类似游戏引擎编辑器)| 因此,对于初次使用的用户: - 需要创建项目或切换引擎版本时,使用SDK Browser。 - 需要构建3D场景时,使用Unigine Editor。 引用[1]中提到的`engine.editor`对象实际上是脚本中用于与编辑器交互的接口(例如在运行时获取编辑器的状态),而`engine.gui`用于界面绘制,`engine.controls`用于处理输入控制。这些都是在项目运行阶段通过代码访问的,与两个工具本身的功能定位不同[^1]。 注意:在开发过程中,两个工具通常需要配合使用。例如,通过SDK Browser启动编辑器,在编辑器中完成场景制作后,再通过SDK Browser运行最终项目。 §§相关问题§§ 1. 如何在Unigine Editor中创建自定义材质? 2. 如何通过Unigine SDK Browser配置项目的启动参数? 3. Unigine Editor中有哪些常用的快捷键? 4. 如何在Unigine项目中管理多个场景? 5. 如何将外部3D模型导入Unigine Editor?</think>### Unigine Editor 与 Unigine SDK Browser 核心区别解析 对于初次使用 Unigine 引擎的开发者,理解以下两个核心工具的区别至关重要: | **功能维度** | **Unigine SDK Browser** | **Unigine Editor** | |--------------------|---------------------------------------------|----------------------------------------| | **核心定位** | 项目生命周期管理工具 | 实时场景编辑与开发环境 | | **主要功能** | • 创建/删除项目<br>• 管理引擎版本<br>• 配置启动参数<br>• 运行/编译项目 | • 可视化场景搭建<br>• 实时材质编辑<br>• 物理系统配置<br>• 脚本调试 | | **工作流阶段** | 项目初始化阶段 | 开发与迭代阶段 | | **交互对象** | 管理引擎实例项目文件 | 直接操作场景节点资源 | | **典型使用场景** | 创建新项目时选择模板引擎版本 | 放置3D模型并配置物理属性 | #### 详细功能对比 1. **SDK Browser - 项目管理中枢** - 相当于引擎的"控制中心",提供: - 多版本引擎管理(切换不同SDK版本) - 项目模板选择(VR/Simulation/Empty等) - 启动参数配置(分辨率、API等) - 一键编译运行(生成可执行文件) - 示例:创建工业仿真项目时选择`Simulation`模板并指定OpenGL渲染后端 2. **Editor - 可视化开发环境** - 功能聚焦在实时内容创作: - 场景图节点操作(拖放式对象布置) - 材质编辑器(可视化节点式编辑) - 物理属性调试(碰撞体/关节/力场) - 脚本热重载(实时修改C++/C#逻辑) - 关键特性:通过`engine.editor`[^1]对象可编程控制编辑器行为 #### 工作流关系图解 ```mermaid graph LR A[SDK Browser] -->|创建项目| B(选择模板) A -->|启动| C[Unigine Editor] C -->|编辑| D[场景/材质/脚本] C -->|测试| E[Play模式] E -->|修改| C A -->|最终构建| F[可执行程序] ``` #### 新手使用建议 1. **初始阶段优先掌握 SDK Browser** - 创建项目时注意选择匹配的引擎版本 - 利用预设模板加速开发(如VR项目选VR模板) - 通过`Controls`标签页配置输入设备 2. **开发阶段深入使用 Editor** - 掌握场景节点树(World Nodes)的操作逻辑 - 善用`engine.gui`[^1]创建调试界面 - 通过`Ctrl+G`快捷键快速进入游戏模式测试 > 经验提示:日常开发中通常以 Editor 为主工作环境,但需通过 SDK Browser 管理项目基础配置。当需要切换引擎版本或部署最终版本时,必须回到 SDK Browser 操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值