使用版本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
}