程序注意事项.md 3.9 KB

程序注意事项

Spine

SkeletonAnimation高级参数

  1. Initial Flip X, Initial Flip Y. 这两个选项在动画开始时水平或垂直地翻转skeleton. 他们会把翻转后的skeleton的 ScaleX 和 ScaleY 置为 -1 .
  2. Animation Update. 设置是以一般的Update(默认) 还是基于物理的 FixedUpdate 方式来更新动画, 也可以靠用户调用来手动更新动画. 当使用SkeletonRootMotion组件并指定了 Rigidbody 或 Rigidbody2D 时, 推荐将更新模式置为In FixedUpdate, 其他情况则建议置为 In Update.
  3. Update When Invisible. 当MeshRenderer不可见时的更新模式.当网格再度可见时,更新模式会自动重置为 UpdateMode.FullUpdate..
  4. Use single submesh. 该选项选项用于简化子网格的生成, 它假设skeleton只使用了一个Material且只需一个子网格. 这将禁用多种materials、渲染分离(render separation)和自定义槽位materials.
  5. Fix Draw Order. 仅适用于使用3个以上子网格的情况(顺序交错的多个 materials,例如 "A B A").如果为 "true",MaterialPropertyBlocks会被赋值到每个material中,以防止LWRP等渲染器对子网格进行主动(aggressive) batching, 从而导致绘制顺序错误(例如,"A1 B A2 "变为"A1 A2 B").当绘制正确时,可以禁用该参数来避免额外的性能开销.
  6. Immutable triangles. 启用该参数可以优化附件图片可见性固定不变时skeletons的渲染. 若启用则三角形将不会被更新. 如果skeleton的附件未使用swapping或hiding, 或者未使用绘制顺序键(keys), 则应启用此选项来进行优化. 否则设置为false可能会导致渲染时出现错误.
  7. Clear State on Disable. 当该组件或其GameObject被禁用时,清除渲染和skeleton的状态.这可以避免它们在再次启用时之前的状态被保留.当pooling skeleton时,将其设置为"true"可能会有所裨益.
  8. Fix Prefab Override MeshFilter. 该选项能修复了Prefab总是被标记为已更改的问题(将MeshFilter 的隐藏标志置为DontSaveInEditor), 但会导致其他组件丢失对 MeshFilter 的引用. 当设置为 Use Global Settings, 运行时将使用 Spine Preferences 中保存的设置.
  9. Separator Slot Names. 设置渲染分离时的槽位名称. SkeletonRenderSeparator 等组件将使用该选项,以便在不同的GameObjects上用两个独立的渲染器来渲染skeleton.
  10. Z-Spacing. skeleton渲染器组件在X/Y平面上对附件图片自后向前渲染. 每个附件都可以在Z轴上自定义z-spacing值, 以避免 z-fighting 现象.
  11. PMA Vertex Colors. 将顶点色彩RGB值与顶点色彩alpha值相乘. 如果用于渲染的着色器是Spine着色器(即使使用了 Straight Alpha Texture )或者使用了PMA additive blend模式 Blend One OneMinusSrcAlpha 的第三方着色器, 则应启用该参数. 对于使用普通blend模式 Blend SrcAlpha OneMinusSrcAlpha 的一般着色器, 则应禁用此参数. 该参数启用时, 将在同一个绘制调用(draw call)中渲染additive槽位和普通槽位. 而禁用时, additive槽位则必须启用SkeletonData的Blend Mode Materials - Apply Additive Material选项, 这会产生额外的绘制调用, 可能会对性能产生负面影响.
  12. 使用具有不同Material值的Renderer. SetPropertyBlock会破坏渲染器之间的batching. 当MaterialPropertyBlock的参数相等时(例如所有的tint颜色都设置为绿色)那么渲染器间将进行batching.
  13. 每当你改变或增加MaterialPropertyBlock的属性值时, 你都需要调用 SetPropertyBlock. 但你可以把MaterialPropertyBlock作为你的类的成员, 这样你就不必在改变某个属性值时不得不实例化出一个新的.
  14. 当你需要经常设置某个属性时, 你可以使用静态方法: Shader.PropertyToID(string) 来缓存该属性的int ID, 而不是字符串重载MaterialPropertyBlock的setter.

参考文档:

spine-unity运行时文档