This page has been translated automatically.
视频教程
界面
要领
高级
实用建议
UnigineEditor
界面概述
资产工作流程
设置和首选项
项目开发
调整节点参数
Setting Up Materials
Setting Up Properties
照明
Landscape Tool
Sandworm (Experimental)
使用编辑器工具执行特定任务
Extending Editor Functionality
嵌入式节点类型
Nodes
Objects
Effects
Decals
Light Sources
Geodetics
World Objects
Sound Objects
Pathfinding Objects
Players
编程
搭建开发环境
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
双精度坐标
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

新逻辑系统New Logic System

自Unigine 2.2版本以来,C++ 和 C# 应用程序的逻辑实现具有不同的方法。

从现在开始,不必再与引擎中的主循环发生冲突,引擎会提供应当被继承的类。

这些类的逻辑与运行脚本形同:

在相当于脚本的方法之后,新类中的方法会被引擎自动进行调用。

背景知识
本文基于读者已经了解下列话题的相关知识而创作。请在开始之前阅读这些内容:
注意
创建新项目时,所有所需的类会自动从相应的新逻辑系统类中得以继承。

发生的根本变化#

在Unigine的早期版本中,需使用my_update()my_render()my_swap() 函数(在开发 C++/C# 应用程序时)来中断引擎的主循环。下方是这种动作过程的一段代码示例:

源代码 (C++)
while (engine->isDone() == 0) {

		// 在主循环中更新
		engine->update();
		// 应用程序更新
		my_update();

		// 在主循环中进行渲染
		engine->render();
		my_render();

		// 在主循环中进行调换
		engine->swap();
		my_swap();
	}

当引擎::update()内的所有函数执行以后,引擎会调用这些函数:

现在应使用继承的WorldLogic, SystemLogic, EditorLogic类来创建新的类并在内部执行您自己的方法(此处为一个AppWorldLogic.h的示例):

源代码 (C++)
#include <UnigineLogic.h>
#include <UnigineStreams.h>

class AppWorldLogic : public Unigine::WorldLogic {
	
public:
	AppWorldLogic();
	virtual ~AppWorldLogic();
	
	virtual int init();
	virtual int shutdown();
	virtual int destroy();
	
	virtual int update();
	virtual int render();
	virtual int flush();
	
	virtual int save(const Unigine::StreamPtr &stream);
	virtual int restore(const Unigine::StreamPtr &stream);
};

在对应的世界脚本方法如 init(), update(),等之后,引擎会调用所有得以实施的WorldLogic类中的函数。

您应当使用这些方法(应为这些为虚拟方法),创建这些类的实例并传送给引擎的主函数:

源代码 (C++)
#include <UnigineEngine.h>

#include "AppSystemLogic.h"
#include "AppWorldLogic.h"
#include "AppEditorLogic.h"

using namespace Unigine;
#ifdef _WIN32
	int wmain(int argc,wchar_t *argv[]) {
#else
	int main(int argc,char *argv[]) {
#endif
	AppSystemLogic system_logic;
	AppWorldLogic world_logic;
	AppEditorLogic editor_logic;
	
	Unigine::EnginePtr engine(UNIGINE_VERSION,argc,argv);
	
	engine->main(&system_logic,&world_logic,&editor_logic);
	
	return 0;
}

最新更新: 2020-11-24
Build: ()