Пример #1
0
 protected override void GenerateUV(Mesh mesh, UVGenerationMode mode)
 {
     switch (mode)
     {
     case UVGenerationMode.PerTriangleEditorOnly:
 #if UNITY_EDITOR
         mesh.SetUVs(0, Unwrapping.GeneratePerTriangleUV(mesh));
 #endif
         break;
         //case UVGenerationMode.Spherical:
         // TODO
         //break;
     }
 }
Пример #2
0
        public override void LockMesh
        (
            bool autoRigging,
            bool async,
            Mesh mesh = null,
            UVGenerationMode uvGeneration = UVGenerationMode.None
        )
        {
            m_lockMeshIntermediateState = LockMeshIntermediateStateEnum.PreLock;

      #if UNITY_EDITOR
            Undo.RecordObject(this, "Lock Mesh (" + name + ")");
      #endif

            base.LockMesh(autoRigging, async, mesh, uvGeneration);

      #if UNITY_EDITOR
            Undo.FlushUndoRecordObjects();
      #endif

            switch (MeshGenerationRenderableMeshMode)
            {
            case RenderableMeshMode.None:
                break;

            case RenderableMeshMode.Procedural:
                MarkNeedsCompute();
                break;

            case RenderableMeshMode.MeshRenderer:
                AddLockedStandardMesh(gameObject, autoRigging, async, mesh, uvGeneration);
                if (!async)
                {
                    DisposeLocalResources();
                }
                break;
            }

            m_lockMeshIntermediateState = LockMeshIntermediateStateEnum.PostLock;
        }
Пример #3
0
        public override Mesh AddLockedStandardMesh
        (
            GameObject go,
            bool autoRigging,
            bool async,
            Mesh mesh = null,
            UVGenerationMode uvGeneration = UVGenerationMode.None
        )
        {
      #if UNITY_EDITOR
            Undo.RecordObject(this, name);
      #endif

            var transformStack = new Stack <Transform>();
            transformStack.Push(transform);
            while (transformStack.Count > 0)
            {
                var t = transformStack.Pop();
                if (t == null)
                {
                    continue;
                }

        #if UNITY_EDITOR
                Undo.RecordObject(t, t.name);
        #endif

                for (int i = 0; i < t.childCount; ++i)
                {
                    transformStack.Push(t.GetChild(i));
                }
            }

            m_doRigging = autoRigging;
            Transform [] aBone;
            mesh        = GenerateMesh(GeneratedMeshType.Standard, go.transform, out aBone, async, mesh, uvGeneration);
            m_doRigging = false;

            Material material = ResourcesUtil.DefaultLockedMeshMaterial;

            if (autoRigging)
            {
                var meshRenderer = AddComponentHelper <SkinnedMeshRenderer>(go);
                meshRenderer.sharedMesh     = mesh;
                meshRenderer.sharedMaterial = material;
                meshRenderer.bones          = aBone;
                meshRenderer.rootBone       = go.transform;
            }
            else
            {
                var meshFilter   = AddComponentHelper <MeshFilter>(go);
                var meshRenderer = AddComponentHelper <MeshRenderer>(go);
                meshFilter.sharedMesh       = mesh;
                meshRenderer.sharedMaterial = material;
            }

      #if UNITY_EDITOR
            EditorApplication.QueuePlayerLoopUpdate();
      #endif

            return(mesh);
        }