DragonBones / DragonBonesCSharp

DragonBones C# Runtime
MIT License
537 stars 198 forks source link

如何自动释放 UnityDragonBonesData #47

Closed jareguo closed 6 years ago

jareguo commented 6 years ago

请教一下,我看到 UnityDragonBonesData 中有一个方法叫做 RemoveFromFactory,这个方法需要用户手动调用吗? 如果有多份 UnityDragonBonesData 共享了相同的纹理,其中一份释放后,纹理也就释放了。那么 factory 中剩余的 UnityDragonBonesData 该如何处理?

wuliao2230 commented 6 years ago

1.对,RemoveFromFactory是需要手动施放的,你也可以在切换场景的时候,调用UnityFacotry.factory.Clear(true)来释放DragonBones的数据。 2.这种情况应该是没法出现的,因为UnityDragonBonesData是由DragonBones编辑器生成的,每一份导出的数据应该只能共享自己的纹理数据,而不同的UnityDragonBonesData是共享不同的纹理数据(就算纹理数据用的相同也是不同的数据)

jareguo commented 6 years ago

谢谢回复。

我还想问一下,不同的 DragonBonesData,有可能共享同一个名字吗?

因为我有收到用户反馈,在同一个龙骨工程里面导出来的多个动画,他们共用相同的龙骨资源,但是是不同的动画,所以这里他们的 name 是一样的,但是 data 是不同的。 如果真的是这样的话,factory 现有的 API 似乎就没办法很好的管理这种资源。

这个反馈来自 CocosCreator 的 PR:https://github.com/cocos-creator/engine/pull/2002/files

wuliao2230 commented 6 years ago

你好,我们是这样设计的,一个龙骨工程导出一个DragonBonesData(龙骨数据),一个DragonBonesData里面包含多个ArmatureData(骨架数据),这些数据对于开发者来说应该是只读的,不需要修改。 理论上同一个游戏项目中,不同的DragonBonesData应该是不同的名字,如果名字相同,创建出来的Armature可能不是自己想要的。 但是有的时候可能避免不了会出现重复的name(比如:第三方资源),这时候如果不修改资源的话,程序中调用的时候,就需要在从Json解析DragonBonesData时自己修改一下这个名字,EgretFactory中的parseDragonBonesData第二个参数就允许你给DragonBonesData另起一个名字,此时调用buildArmatureDisplay(armatureName, 新的重命名)就可以了。 希望可以帮到你。

jareguo commented 6 years ago

哦~ 所以这也就是 UnityDragonBonesData 允许用户设置 Data Name 的原因吧? 谢谢!