unigine 加载data之外的路径

本文介绍如何在Unigine 2.7版本中通过自定义类MyPackages加载外部文件,实现对任意格式文件及文件夹的灵活加载,包括cpp源文件和world场景文件的读取。

使用版本2.5

Unigine 可以加载data之外的路径,代码如下

不过这个代码之后,不会立即可以访问,需要 等待一定时间才能进行访问。
可以通过FileSystem::get()->isFile(path) 来判断文件是否能访问。

还可通过ulink来进行访问。

在2.7中还可以通过类来加载packge,非常的灵活,通过这种方式,可以使用自定义的任何格式 甚至 文件夹。只要自己往其中正确添加代码。

#include "UnigineFileSystem.h"
class MyPackages : public Unigine::Package
{
public:
	MyPackages ();
	~MyPackages () {};


	// clone package
	virtual Unigine::Package *clone();

	// list of files
	virtual int getNumFiles();
	virtual const char *getFileName(int num);

	// read file
	virtual int selectFile(const char *name, int &size);
	virtual int readFile(unsigned char *data, int size);
private:
	void setVariables();
private:

	Unigine::String material = "";
	Unigine::String fragment = "";
	Unigine::String vertex = "";

	int m_selectedIndex = -1;
};

Package *MyPackage::clone()
{
	return NULL;
}

int MyPackage::getNumFiles()
{
	Log::warning("MyPackage::getNumFiles(): called\n");

	return 2;
}

const char *MyPackage::getFileName(int num)
{
	Log::warning("MyPackage::getFileName(%d): called\n", num);

	if (num == 0)
		return "data/package.cpp";
	if (num == 1)
		return "data/package.world";

	return NULL;
}

int MyPackage::selectFile(const char *name, int &size)
{
	Log::warning("MyPackage::selectFile(\"%s\",): called\n", name);

	// select file
	file = NULL;
	if (!strcmp(name, "data/package.cpp"))
		file = fopen("my_data/package.cpp", "rb");
	if (!strcmp(name, "data/package.world"))
		file = fopen("my_data/package.world", "rb");
	if (file == NULL)
		return 0;

	// get file size
	fseek(file, 0, SEEK_END);
	size = (int)ftell(file);
	fseek(file, 0, SEEK_SET);

	return 1;
}

int MyPackage::readFile(unsigned char *data, int size)
{
	Log::warning("MyPackage::readFile(,%d): called\n", size);

	// read file
	int ret = ((int)fread(data, sizeof(unsigned char), size, file) == size);

	// close file
	fclose(file);

	return ret;
}
WorldLogic::init()
{
    m_packet = new MyPackages();
    FileSystem::get()->MyPackages(m_packet);//add material file
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值