Fix Unity 5.6 submesh sorting bug

This commit is contained in:
2017-05-15 23:46:15 +07:00
parent 4451018727
commit 26e30e45f2
5 changed files with 39 additions and 4 deletions

View File

@@ -2,6 +2,7 @@
* Fix shape groups in tweens problems
* Fix locked elements problem
* Fix optimizator bitmap trim problems
* Fix Unity 5.6 submesh sorting bug
* Add shape tween warning
* Remove excess "if" instruction from shaders

View File

@@ -1,4 +1,5 @@
using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor;
using System.IO;
@@ -40,6 +41,9 @@ namespace FTEditor.Editors {
var clip_go = new GameObject(clip.name);
clip_go.AddComponent<MeshFilter>();
clip_go.AddComponent<MeshRenderer>();
#if UNITY_5_6_OR_NEWER
clip_go.AddComponent<SortingGroup>();
#endif
clip_go.AddComponent<SwfClip>().clip = clip;
clip_go.AddComponent<SwfClipController>();
return clip_go;

View File

@@ -27,6 +27,17 @@ namespace FTRuntime.Internal {
//
//
public static T GetOrCreateComponent<T>(GameObject obj) where T : Component {
var comp = obj.GetComponent<T>();
return comp != null
? comp
: obj.AddComponent<T>();
}
//
//
//
public static void FillGeneratedMesh(Mesh mesh, SwfClipAsset.MeshData mesh_data) {
if ( mesh_data.SubMeshes.Length > 0 ) {
mesh.subMeshCount = mesh_data.SubMeshes.Length;

View File

@@ -1,13 +1,21 @@
using UnityEngine;
using UnityEngine.Rendering;
using FTRuntime.Internal;
namespace FTRuntime {
[ExecuteInEditMode, DisallowMultipleComponent]
#if UNITY_5_6_OR_NEWER
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer), typeof(SortingGroup))]
#else
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
#endif
public class SwfClip : MonoBehaviour {
MeshFilter _meshFilter = null;
MeshRenderer _meshRenderer = null;
#if UNITY_5_6_OR_NEWER
SortingGroup _sortingGroup = null;
#endif
bool _dirtyMesh = true;
SwfClipAsset.Sequence _curSequence = null;
@@ -274,8 +282,11 @@ namespace FTRuntime {
}
void ClearCache() {
_meshFilter = GetComponent<MeshFilter>();
_meshRenderer = GetComponent<MeshRenderer>();
_meshFilter = SwfUtils.GetOrCreateComponent<MeshFilter>(gameObject);
_meshRenderer = SwfUtils.GetOrCreateComponent<MeshRenderer>(gameObject);
#if UNITY_5_6_OR_NEWER
_sortingGroup = SwfUtils.GetOrCreateComponent<SortingGroup>(gameObject);
#endif
_dirtyMesh = true;
_curSequence = null;
_curPropBlock = null;
@@ -336,6 +347,12 @@ namespace FTRuntime {
_meshRenderer.sortingOrder = sortingOrder;
_meshRenderer.sortingLayerName = sortingLayer;
}
#if UNITY_5_6_OR_NEWER
if ( _sortingGroup ) {
_sortingGroup.sortingOrder = sortingOrder;
_sortingGroup.sortingLayerName = sortingLayer;
}
#endif
}
void UpdatePropBlock() {

View File

@@ -61,14 +61,16 @@ dipyalov: фишка в том, что swf обновился, но и собр
**** DONE Элемент может быть залокан (element.locked)
**** DONE Возможно не стоит преобразовывать группы в символы
Таки стоит, но с рекурсивным выносом в отдельные символы и последующей их обработкой
**** TODO В ошибках конвертации писать, что нужно прогнать через скрипт экспорта
**** DONE В ошибках конвертации писать, что нужно прогнать через скрипт экспорта
А еще лучше как-то метить прогнанную анимацию и нет
*** Баги
**** TODO При больших (>= 4000 пикселей) выделениях не работает convertSelectionToBitmap
**** TODO Не работает конвертация в batchmod'е
**** DONE В ошибках конвертации не пишется путь до swf
**** DONE Не растеризуются группы в твинах
**** TODO Unity может переставлять сабмеши на одинаковой глубине (проблема с масками)
**** DONE Unity может переставлять сабмеши на одинаковой глубине (проблема с масками)
https://fogbugz.unity3d.com/default.asp?910858_0diqjnj67814hj3i
http://ru.esotericsoftware.com/forum/Submeshes-render-in-random-order-with-orthographic-camera-8528
**** TODO При автоплее с пустым клипом контроллер накапливает _tickTimer
**** TODO Возможно проблемы с DX9
UNITY_UV_STARTS_AT_TOP