我们现在是基于WP来做大世界的相关开发,PFPA下现在的资产数量太多了,看了下代码FGuid::NewGuid用的都是平台的方法,而不是基于路径的确定性GUID的方案,这样的话这块会出现百万数量级文件 GUID冲突的情况么?
重现步骤
您好,获取GUID是在GetLoadedExternalObjectPackages这个方法里面,是根据路径来的
不知道是不是有什么没对齐的地方或许我理解错了
我们查看了GetLoadedExternalObjectPackages这个方法,似乎没有跟GUID有关联的内容。我们现在的需求是这样的:UE会给每一个资源生成一个GUID值,这个GUID值生成的方法是FGuid::NewGuid(如果找错了,请指正),这个方法底层是调用平台自身的GUID方法,跟资源本身路径没有关系,那么一旦资源量级到几百万,如何能保证每个资源拥有的GUID值是不同的。
就是OFPA的路径,类似这样:
/Game/__ExternalActors__/ThirdPerson/Maps/BasicMap/2/15/4DV7DTNHD6POCITGE6WC5M
对,我的意思是可以参考这个方法,里面会获取路径并生成唯一的id
我刚才又看了一遍这个方法,还是没找到里面有生成唯一ID的内容😥。可以麻烦贴一下具体的逻辑吗~
抱歉,在调用GetLoadedExternalObjectPackages前还有一些步骤,
在AActor::SetPackageExternal 中,
调用 ULevel::CreateActorPackage(LevelPackage, GetLevel()->GetActorPackagingScheme(), GetPathName(), this);
这里获取 external package 路径,这里是唯一的
请问一下获取到唯一ID的格式是怎么样的,GUID应该类似于606E793E440BB2D890BAEA9BCDDCDE64用-进行分割
那每个资源不是会有自己的GUID值吗,就是PersistentGuid,这个值是不是通过FGuid::NewGuid生成的,那大量的WP资源会不会有重复的可能
[Image Removed]
Package下的这个PersistentGuid 是通过FGuid::NewGuid生成的, 但是重复的概率比较小,几乎可以忽略不计, windows下这个值有2^128随机空间