测试使用unigine版本 Unigine2.3.1

Unigine NodeReference是内部类, 用于导入unigine特有的内部的node文件。
用NodeReference添加节点后,经常可能会出现 删除节点失败的现象。

如下为我的node 文件结构\"\"

node Reference导入后,产生一个通过getReference 或者detachReference,能获取到对应的节点。getReference方式获取的节点,在NodeReference对象被销毁时而被销毁(如果有node保存getReference()的值,则不能对该node调用grab函数,这个问题会导致crash)。正确使用方式应该如下三种:
方式1:
NodeReferencePtr ref = NodeReference::create(path);//此处可以将ref定义成全局变量
ref->release();
NodePtr node = ref->getReference();
方式2:
NodeReferencePtr ref = NodeReference::create(path);
NodePtr node = ref->getReference->clone();//此处可以将node定义成全局变量
node.release();

方式3:

NodeReferencePtr ref = NodeReference::create(path);
NodePtr node = ref->detachReference();//可以将node定义成全局变量。
node.release();

 

而对于拿到独立node 对象后,释放 对象也需要注意,需要递归让子对象获取owner权限。
如下:

for (int i = 0; i < m_node->getNumChildren(); i++)
{
       m_node->getChild(i)->grab();
}
m_node->grab();
m_node.destroy();

对于NodeReference对象, 记住先将其通过getreference拿到的node对象进行release操作,对node对象调用destroy()。然后对nodereference对象直接grab(),destroy()。

收藏 打印