This page has been translated automatically.
编程
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
CIGI Client 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;
}

最新更新: 2017-10-20
Build: ()