UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
FAQ
编程
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
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
CIGI Client Plugin
Rendering-Related Classes

新逻辑系统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-07-03