unigine meterial 卸载

使用unigine版本2.5

unigine material卸载后,再装载材质, 当重新导入使用该材质的node文件,会发现材质无法与node中的mesh进行自动绑定。

两种方式可以解决这个问题。

1、将 node文件进行简单的解析,逐个mesh去设置材质。

NodePtr node = Editor::get()->getNodeByName("yyyy");
		if (node.get())
		{
			NodeReferencePtr ref = NodeReference::cast(node);
			NodePtr pa = ref->getReference();
			int num = pa->getNumChildren();
			pa = pa->getChild(pa->findChild("A380_MainBody"));
			if (pa.get()) {
				ObjectMeshStaticPtr mesh = ObjectMeshStatic::cast(pa);
				int ret = mesh->setMaterial("A380_MainBody", 0);
				mesh->setProperty("surface_base", 0);
			}
		}

2、通过World::loadAsyncNode 异步加载后再对节点进行clone

void destroyNode(NodePtr &node)
{
	while (node->getNumChildren()>0)
	{
		NodePtr temp = node->getChild(0);
		temp->grab();
		destroyNode(temp);
		node->removeChild(temp);
		temp.destroy();
	}
}

int AppWorldLogic::update() {

	if (World::get()->checkAsyncNode(asyncNodeId))
	{
		NodePtr node = World::get()->getAsyncNode(asyncNodeId);
		if (node.get())
		{
            znode = node->clone();
			destroyNode(node);
            node->grab();
			node.destroy();
			znode->grab();
		}
	}
	if (App::get()->clearKeyState(' '))
	{
		asyncNodeId = World::get()->loadAsyncNode("nodes/plane.node");
	}
	else if (App::get()->clearKeyState(','))
	{
		destroyNode(znode);
		znode.destroy();
		Log::message("remove node\n");
	}
	else if (App::get()->clearKeyState('/'))
	{
		int ret = Materials::get()->load("uy.mat");
	}

	else if (App::get()->clearKeyState('.'))
	{
		Materials::get()->clear("uy.mat");
	}
	return 1;
}

猜你喜欢

转载自blog.csdn.net/qiushangren/article/details/87697536
今日推荐