상속: UnityEngine.MonoBehaviour
예제 #1
0
        /// <summary>Add a child SkeletonPartsRenderer GameObject to this SkeletonRenderSeparator.</summary>
        public SkeletonPartsRenderer AddPartsRenderer(int sortingOrderIncrement = DefaultSortingOrderIncrement, string name = null)
        {
            int sortingLayerID = 0;
            int sortingOrder   = 0;

            if (partsRenderers.Count > 0)
            {
                var previous             = partsRenderers[partsRenderers.Count - 1];
                var previousMeshRenderer = previous.MeshRenderer;
                sortingLayerID = previousMeshRenderer.sortingLayerID;
                sortingOrder   = previousMeshRenderer.sortingOrder + sortingOrderIncrement;
            }

            if (string.IsNullOrEmpty(name))
            {
                name = partsRenderers.Count.ToString();
            }

            var spr = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRenderer.transform, name);

            partsRenderers.Add(spr);

            var mr = spr.MeshRenderer;

            mr.sortingLayerID = sortingLayerID;
            mr.sortingOrder   = sortingOrder;

            return(spr);
        }
        /// <summary>Adds a SkeletonRenderSeparator and child SkeletonPartsRenderer GameObjects to a given SkeletonRenderer.</summary>
        /// <returns>The to skeleton renderer.</returns>
        /// <param name="skeletonRenderer">The target SkeletonRenderer or SkeletonAnimation.</param>
        /// <param name="sortingLayerID">Sorting layer to be used for the parts renderers.</param>
        /// <param name="extraPartsRenderers">Number of additional SkeletonPartsRenderers on top of the ones determined by counting the number of separator slots.</param>
        /// <param name="sortingOrderIncrement">The integer to increment the sorting order per SkeletonPartsRenderer to separate them.</param>
        /// <param name="baseSortingOrder">The sorting order value of the first SkeletonPartsRenderer.</param>
        /// <param name="addMinimumPartsRenderers">If set to <c>true</c>, a minimum number of SkeletonPartsRenderer GameObjects (determined by separatorSlots.Count + 1) will be added.</param>
        public static SkeletonRenderSeparator AddToSkeletonRenderer(SkeletonRenderer skeletonRenderer, int sortingLayerID = 0, int extraPartsRenderers = 0, int sortingOrderIncrement = DefaultSortingOrderIncrement, int baseSortingOrder = 0, bool addMinimumPartsRenderers = true)
        {
            if (skeletonRenderer == null)
            {
                Debug.Log("Tried to add SkeletonRenderSeparator to a null SkeletonRenderer reference.");
                return(null);
            }

            var srs = skeletonRenderer.gameObject.AddComponent <SkeletonRenderSeparator>();

            srs.skeletonRenderer = skeletonRenderer;

            skeletonRenderer.Initialize(false);
            int count = extraPartsRenderers;

            if (addMinimumPartsRenderers)
            {
                count = extraPartsRenderers + skeletonRenderer.separatorSlots.Count + 1;
            }

            var skeletonRendererTransform = skeletonRenderer.transform;
            var componentRenderers        = srs.partsRenderers;

            for (int i = 0; i < count; i++)
            {
                var spr = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRendererTransform, i.ToString());
                var mr  = spr.MeshRenderer;
                mr.sortingLayerID = sortingLayerID;
                mr.sortingOrder   = baseSortingOrder + (i * sortingOrderIncrement);
                componentRenderers.Add(spr);
            }

            return(srs);
        }
예제 #3
0
 private void OnEnable()
 {
     if (this.skeletonRenderer == null)
     {
         return;
     }
     if (this.copiedBlock == null)
     {
         this.copiedBlock = new MaterialPropertyBlock();
     }
     this.mainMeshRenderer = this.skeletonRenderer.GetComponent <MeshRenderer>();
     this.skeletonRenderer.GenerateMeshOverride -= this.HandleRender;
     this.skeletonRenderer.GenerateMeshOverride += this.HandleRender;
     if (this.copyMeshRendererFlags)
     {
         LightProbeUsage lightProbeUsage = this.mainMeshRenderer.lightProbeUsage;
         bool            receiveShadows  = this.mainMeshRenderer.receiveShadows;
         for (int i = 0; i < this.partsRenderers.Count; i++)
         {
             SkeletonPartsRenderer skeletonPartsRenderer = this.partsRenderers[i];
             if (!(skeletonPartsRenderer == null))
             {
                 MeshRenderer meshRenderer = skeletonPartsRenderer.MeshRenderer;
                 meshRenderer.lightProbeUsage = lightProbeUsage;
                 meshRenderer.receiveShadows  = receiveShadows;
             }
         }
     }
 }
예제 #4
0
        public static SkeletonRenderSeparator AddToSkeletonRenderer(SkeletonRenderer skeletonRenderer, int sortingLayerID = 0, int extraPartsRenderers = 0, int sortingOrderIncrement = 5, int baseSortingOrder = 0, bool addMinimumPartsRenderers = true)
        {
            if (skeletonRenderer == null)
            {
                return(null);
            }
            SkeletonRenderSeparator skeletonRenderSeparator = skeletonRenderer.gameObject.AddComponent <SkeletonRenderSeparator>();

            skeletonRenderSeparator.skeletonRenderer = skeletonRenderer;
            skeletonRenderer.Initialize(overwrite: false);
            int num = extraPartsRenderers;

            if (addMinimumPartsRenderers)
            {
                num = extraPartsRenderers + skeletonRenderer.separatorSlots.Count + 1;
            }
            Transform transform = skeletonRenderer.transform;
            List <SkeletonPartsRenderer> list = skeletonRenderSeparator.partsRenderers;

            for (int i = 0; i < num; i++)
            {
                SkeletonPartsRenderer skeletonPartsRenderer = SkeletonPartsRenderer.NewPartsRendererGameObject(transform, i.ToString());
                MeshRenderer          meshRenderer          = skeletonPartsRenderer.MeshRenderer;
                meshRenderer.sortingLayerID = sortingLayerID;
                meshRenderer.sortingOrder   = baseSortingOrder + i * sortingOrderIncrement;
                list.Add(skeletonPartsRenderer);
            }
            return(skeletonRenderSeparator);
        }
예제 #5
0
        public static SkeletonRenderSeparator AddToSkeletonRenderer(Spine.Unity.SkeletonRenderer skeletonRenderer, int sortingLayerID = 0, int extraPartsRenderers = 0, int sortingOrderIncrement = 5, int baseSortingOrder = 0, bool addMinimumPartsRenderers = true)
        {
            if (skeletonRenderer == null)
            {
                Debug.Log("Tried to add SkeletonRenderSeparator to a null SkeletonRenderer reference.");
                return(null);
            }
            SkeletonRenderSeparator separator = skeletonRenderer.gameObject.AddComponent <SkeletonRenderSeparator>();

            separator.skeletonRenderer = skeletonRenderer;
            skeletonRenderer.Initialize(false);
            int num = extraPartsRenderers;

            if (addMinimumPartsRenderers)
            {
                num = (extraPartsRenderers + skeletonRenderer.separatorSlots.Count) + 1;
            }
            Transform parent = skeletonRenderer.transform;
            List <SkeletonPartsRenderer> partsRenderers = separator.partsRenderers;

            for (int i = 0; i < num; i++)
            {
                SkeletonPartsRenderer item         = SkeletonPartsRenderer.NewPartsRendererGameObject(parent, i.ToString());
                MeshRenderer          meshRenderer = item.MeshRenderer;
                meshRenderer.sortingLayerID = sortingLayerID;
                meshRenderer.sortingOrder   = baseSortingOrder + (i * sortingOrderIncrement);
                partsRenderers.Add(item);
            }
            return(separator);
        }
예제 #6
0
        private void HandleRender(SkeletonRendererInstruction instruction)
        {
            int count = partsRenderers.Count;

            if (count <= 0)
            {
                return;
            }
            if (copyPropertyBlock)
            {
                mainMeshRenderer.GetPropertyBlock(copiedBlock);
            }
            MeshGenerator.Settings settings = default(MeshGenerator.Settings);
            settings.addNormals         = skeletonRenderer.addNormals;
            settings.calculateTangents  = skeletonRenderer.calculateTangents;
            settings.immutableTriangles = false;
            settings.pmaVertexColors    = skeletonRenderer.pmaVertexColors;
            settings.tintBlack          = skeletonRenderer.tintBlack;
            settings.useClipping        = true;
            settings.zSpacing           = skeletonRenderer.zSpacing;
            MeshGenerator.Settings           settings2           = settings;
            ExposedList <SubmeshInstruction> submeshInstructions = instruction.submeshInstructions;

            SubmeshInstruction[] items = submeshInstructions.Items;
            int num = submeshInstructions.Count - 1;
            int i   = 0;
            SkeletonPartsRenderer skeletonPartsRenderer = partsRenderers[i];
            int j            = 0;
            int startSubmesh = 0;

            for (; j <= num; j++)
            {
                if (items[j].forceSeparate || j == num)
                {
                    MeshGenerator meshGenerator = skeletonPartsRenderer.MeshGenerator;
                    meshGenerator.settings = settings2;
                    if (copyPropertyBlock)
                    {
                        skeletonPartsRenderer.SetPropertyBlock(copiedBlock);
                    }
                    skeletonPartsRenderer.RenderParts(instruction.submeshInstructions, startSubmesh, j + 1);
                    startSubmesh = j + 1;
                    i++;
                    if (i >= count)
                    {
                        break;
                    }
                    skeletonPartsRenderer = partsRenderers[i];
                }
            }
            for (; i < count; i++)
            {
                partsRenderers[i].ClearMesh();
            }
        }
예제 #7
0
        private void HandleRender(SkeletonRenderer.SmartMesh.Instruction instruction)
        {
            int count = this.partsRenderers.Count;

            if (count <= 0)
            {
                return;
            }
            int i = 0;

            if (this.copyPropertyBlock)
            {
                this.mainMeshRenderer.GetPropertyBlock(this.copiedBlock);
            }
            ExposedList <SubmeshInstruction> submeshInstructions = instruction.submeshInstructions;

            SubmeshInstruction[] items = submeshInstructions.Items;
            int num = submeshInstructions.Count - 1;
            SkeletonPartsRenderer skeletonPartsRenderer = this.partsRenderers[i];
            bool calculateNormals  = this.skeletonRenderer.calculateNormals;
            bool calculateTangents = this.skeletonRenderer.calculateTangents;
            bool pmaVertexColors   = this.skeletonRenderer.pmaVertexColors;
            int  j            = 0;
            int  startSubmesh = 0;

            while (j <= num)
            {
                if (items[j].forceSeparate || j == num)
                {
                    ISubmeshSetMeshGenerator meshGenerator = skeletonPartsRenderer.MeshGenerator;
                    meshGenerator.AddNormals              = calculateNormals;
                    meshGenerator.AddTangents             = calculateTangents;
                    meshGenerator.PremultiplyVertexColors = pmaVertexColors;
                    if (this.copyPropertyBlock)
                    {
                        skeletonPartsRenderer.SetPropertyBlock(this.copiedBlock);
                    }
                    skeletonPartsRenderer.RenderParts(instruction.submeshInstructions, startSubmesh, j + 1);
                    startSubmesh = j + 1;
                    i++;
                    if (i >= count)
                    {
                        break;
                    }
                    skeletonPartsRenderer = this.partsRenderers[i];
                }
                j++;
            }
            while (i < count)
            {
                this.partsRenderers[i].ClearMesh();
                i++;
            }
        }
예제 #8
0
        private void HandleRender(SkeletonRendererInstruction instruction)
        {
            int count = this.partsRenderers.Count;

            if (count > 0)
            {
                if (this.copyPropertyBlock)
                {
                    this.mainMeshRenderer.GetPropertyBlock(this.copiedBlock);
                }
                MeshGenerator.Settings settings = new MeshGenerator.Settings {
                    addNormals         = this.skeletonRenderer.addNormals,
                    calculateTangents  = this.skeletonRenderer.calculateTangents,
                    immutableTriangles = false,
                    pmaVertexColors    = this.skeletonRenderer.pmaVertexColors,
                    tintBlack          = this.skeletonRenderer.tintBlack,
                    useClipping        = true,
                    zSpacing           = this.skeletonRenderer.zSpacing
                };
                ExposedList <SubmeshInstruction> submeshInstructions = instruction.submeshInstructions;
                SubmeshInstruction[]             items = submeshInstructions.Items;
                int num2 = submeshInstructions.Count - 1;
                int num3 = 0;
                SkeletonPartsRenderer renderer = this.partsRenderers[num3];
                int index        = 0;
                int startSubmesh = 0;
                while (index <= num2)
                {
                    if (items[index].forceSeparate || (index == num2))
                    {
                        renderer.MeshGenerator.settings = settings;
                        if (this.copyPropertyBlock)
                        {
                            renderer.SetPropertyBlock(this.copiedBlock);
                        }
                        renderer.RenderParts(instruction.submeshInstructions, startSubmesh, index + 1);
                        startSubmesh = index + 1;
                        num3++;
                        if (num3 >= count)
                        {
                            break;
                        }
                        renderer = this.partsRenderers[num3];
                    }
                    index++;
                }
                while (num3 < count)
                {
                    this.partsRenderers[num3].ClearMesh();
                    num3++;
                }
            }
        }
예제 #9
0
        /// <summary>Adds a SkeletonRenderSeparator and child SkeletonPartsRenderer GameObjects to a given SkeletonRenderer.</summary>
        /// <returns>The to skeleton renderer.</returns>
        /// <param name="skeletonRenderer">The target SkeletonRenderer or SkeletonAnimation.</param>
        /// <param name="sortingLayerID">Sorting layer to be used for the parts renderers.</param>
        /// <param name="extraPartsRenderers">Number of additional SkeletonPartsRenderers on top of the ones determined by counting the number of separator slots.</param>
        /// <param name="sortingOrderIncrement">The integer to increment the sorting order per SkeletonPartsRenderer to separate them.</param>
        /// <param name="baseSortingOrder">The sorting order value of the first SkeletonPartsRenderer.</param>
        /// <param name="addMinimumPartsRenderers">If set to <c>true</c>, a minimum number of SkeletonPartsRenderer GameObjects (determined by separatorSlots.Count + 1) will be added.</param>
        public static SkeletonRenderSeparator AddToSkeletonRenderer(SkeletonRenderer skeletonRenderer, int sortingLayerID = 0, int extraPartsRenderers = 0, int sortingOrderIncrement = DefaultSortingOrderIncrement, int baseSortingOrder = 0, bool addMinimumPartsRenderers = true)
        {
            if (skeletonRenderer == null)
            {
                Debug.Log("Tried to add SkeletonRenderSeparator to a null SkeletonRenderer reference.");
                return(null);
            }

            var srs = skeletonRenderer.gameObject.AddComponent <SkeletonRenderSeparator>();

            srs.skeletonRenderer = skeletonRenderer;

            skeletonRenderer.Initialize(false);
            int count = extraPartsRenderers;

            if (addMinimumPartsRenderers)
            {
                count = extraPartsRenderers + skeletonRenderer.separatorSlots.Count + 1;
            }

            var skeletonRendererTransform = skeletonRenderer.transform;
            var componentRenderers        = srs.partsRenderers;

            for (int i = 0; i < count; i++)
            {
                var spr = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRendererTransform, i.ToString());
                var mr  = spr.MeshRenderer;
                mr.sortingLayerID = sortingLayerID;
                mr.sortingOrder   = baseSortingOrder + (i * sortingOrderIncrement);
                componentRenderers.Add(spr);
            }

            srs.OnEnable();

                        #if UNITY_EDITOR
            // Make sure editor updates properly in edit mode.
            if (!Application.isPlaying)
            {
                skeletonRenderer.enabled = false;
                skeletonRenderer.enabled = true;
                skeletonRenderer.LateUpdate();
            }
                        #endif

            return(srs);
        }
        public void AddPartsRenderer(int count)
        {
            var  componentRenderers = component.partsRenderers;
            bool emptyFound         = componentRenderers.Contains(null);

            if (emptyFound)
            {
                bool userClearEntries = EditorUtility.DisplayDialog("Empty entries found", "Null entries found. Do you want to remove null entries before adding the new renderer? ", "Clear Empty Entries", "Don't Clear");
                if (userClearEntries)
                {
                    componentRenderers.RemoveAll(x => x == null);
                }
            }

            Undo.RegisterCompleteObjectUndo(component, "Add Parts Renderers");
            for (int i = 0; i < count; i++)
            {
                int index = componentRenderers.Count;
                var smr   = SkeletonPartsRenderer.NewPartsRendererGameObject(component.transform, index.ToString());
                Undo.RegisterCreatedObjectUndo(smr.gameObject, "New Parts Renderer GameObject.");
                componentRenderers.Add(smr);

                // increment renderer sorting order.
                if (index == 0)
                {
                    continue;
                }
                var prev = componentRenderers[index - 1]; if (prev == null)
                {
                    continue;
                }

                var prevMeshRenderer    = prev.GetComponent <MeshRenderer>();
                var currentMeshRenderer = smr.GetComponent <MeshRenderer>();
                if (prevMeshRenderer == null || currentMeshRenderer == null)
                {
                    continue;
                }

                int prevSortingLayer = prevMeshRenderer.sortingLayerID;
                int prevSortingOrder = prevMeshRenderer.sortingOrder;
                currentMeshRenderer.sortingLayerID = prevSortingLayer;
                currentMeshRenderer.sortingOrder   = prevSortingOrder + SkeletonRenderSeparator.DefaultSortingOrderIncrement;
            }
        }
예제 #11
0
        public void AddPartsRenderer(int sortingOrderIncrement = 5)
        {
            int sortingLayerID = 0;
            int num2           = 0;

            if (this.partsRenderers.Count > 0)
            {
                SkeletonPartsRenderer renderer  = this.partsRenderers[this.partsRenderers.Count - 1];
                MeshRenderer          renderer2 = renderer.MeshRenderer;
                sortingLayerID = renderer2.sortingLayerID;
                num2           = renderer2.sortingOrder + sortingOrderIncrement;
            }
            SkeletonPartsRenderer item = SkeletonPartsRenderer.NewPartsRendererGameObject(this.skeletonRenderer.transform, this.partsRenderers.Count.ToString());

            this.partsRenderers.Add(item);
            MeshRenderer meshRenderer = item.MeshRenderer;

            meshRenderer.sortingLayerID = sortingLayerID;
            meshRenderer.sortingOrder   = num2;
        }
예제 #12
0
        public void AddPartsRenderer(int sortingOrderIncrement = 5)
        {
            int sortingLayerID = 0;
            int sortingOrder   = 0;

            if (partsRenderers.Count > 0)
            {
                SkeletonPartsRenderer skeletonPartsRenderer = partsRenderers[partsRenderers.Count - 1];
                MeshRenderer          meshRenderer          = skeletonPartsRenderer.MeshRenderer;
                sortingLayerID = meshRenderer.sortingLayerID;
                sortingOrder   = meshRenderer.sortingOrder + sortingOrderIncrement;
            }
            SkeletonPartsRenderer skeletonPartsRenderer2 = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRenderer.transform, partsRenderers.Count.ToString());

            partsRenderers.Add(skeletonPartsRenderer2);
            MeshRenderer meshRenderer2 = skeletonPartsRenderer2.MeshRenderer;

            meshRenderer2.sortingLayerID = sortingLayerID;
            meshRenderer2.sortingOrder   = sortingOrder;
        }
        /// <summary>Add a child SkeletonPartsRenderer GameObject to this SkeletonRenderSeparator.</summary>
        public void AddPartsRenderer(int sortingOrderIncrement = DefaultSortingOrderIncrement)
        {
            int sortingLayerID = 0;
            int sortingOrder   = 0;

            if (partsRenderers.Count > 0)
            {
                var previous             = partsRenderers[partsRenderers.Count - 1];
                var previousMeshRenderer = previous.MeshRenderer;
                sortingLayerID = previousMeshRenderer.sortingLayerID;
                sortingOrder   = previousMeshRenderer.sortingOrder + sortingOrderIncrement;
            }

            var spr = SkeletonPartsRenderer.NewPartsRendererGameObject(skeletonRenderer.transform, partsRenderers.Count.ToString());

            partsRenderers.Add(spr);

            var mr = spr.MeshRenderer;

            mr.sortingLayerID = sortingLayerID;
            mr.sortingOrder   = sortingOrder;
        }
예제 #14
0
        private void OnEnable()
        {
            if (skeletonRenderer == null)
            {
                return;
            }
            if (copiedBlock == null)
            {
                copiedBlock = new MaterialPropertyBlock();
            }
            mainMeshRenderer = skeletonRenderer.GetComponent <MeshRenderer>();
            skeletonRenderer.GenerateMeshOverride -= HandleRender;
            skeletonRenderer.GenerateMeshOverride += HandleRender;
            if (!copyMeshRendererFlags)
            {
                return;
            }
            LightProbeUsage            lightProbeUsage            = mainMeshRenderer.lightProbeUsage;
            bool                       receiveShadows             = mainMeshRenderer.receiveShadows;
            ReflectionProbeUsage       reflectionProbeUsage       = mainMeshRenderer.reflectionProbeUsage;
            ShadowCastingMode          shadowCastingMode          = mainMeshRenderer.shadowCastingMode;
            MotionVectorGenerationMode motionVectorGenerationMode = mainMeshRenderer.motionVectorGenerationMode;
            Transform                  probeAnchor = mainMeshRenderer.probeAnchor;

            for (int i = 0; i < partsRenderers.Count; i++)
            {
                SkeletonPartsRenderer skeletonPartsRenderer = partsRenderers[i];
                if (!(skeletonPartsRenderer == null))
                {
                    MeshRenderer meshRenderer = skeletonPartsRenderer.MeshRenderer;
                    meshRenderer.lightProbeUsage            = lightProbeUsage;
                    meshRenderer.receiveShadows             = receiveShadows;
                    meshRenderer.reflectionProbeUsage       = reflectionProbeUsage;
                    meshRenderer.shadowCastingMode          = shadowCastingMode;
                    meshRenderer.motionVectorGenerationMode = motionVectorGenerationMode;
                    meshRenderer.probeAnchor = probeAnchor;
                }
            }
        }
예제 #15
0
 private void OnEnable()
 {
     if (this.skeletonRenderer != null)
     {
         if (this.copiedBlock == null)
         {
             this.copiedBlock = new MaterialPropertyBlock();
         }
         this.mainMeshRenderer = this.skeletonRenderer.GetComponent <MeshRenderer>();
         this.skeletonRenderer.GenerateMeshOverride -= new Spine.Unity.SkeletonRenderer.InstructionDelegate(this.HandleRender);
         this.skeletonRenderer.GenerateMeshOverride += new Spine.Unity.SkeletonRenderer.InstructionDelegate(this.HandleRender);
         if (this.copyMeshRendererFlags)
         {
             LightProbeUsage            lightProbeUsage            = this.mainMeshRenderer.lightProbeUsage;
             bool                       receiveShadows             = this.mainMeshRenderer.receiveShadows;
             ReflectionProbeUsage       reflectionProbeUsage       = this.mainMeshRenderer.reflectionProbeUsage;
             ShadowCastingMode          shadowCastingMode          = this.mainMeshRenderer.shadowCastingMode;
             MotionVectorGenerationMode motionVectorGenerationMode = this.mainMeshRenderer.motionVectorGenerationMode;
             Transform                  probeAnchor = this.mainMeshRenderer.probeAnchor;
             for (int i = 0; i < this.partsRenderers.Count; i++)
             {
                 SkeletonPartsRenderer renderer = this.partsRenderers[i];
                 if (renderer != null)
                 {
                     MeshRenderer meshRenderer = renderer.MeshRenderer;
                     meshRenderer.lightProbeUsage            = lightProbeUsage;
                     meshRenderer.receiveShadows             = receiveShadows;
                     meshRenderer.reflectionProbeUsage       = reflectionProbeUsage;
                     meshRenderer.shadowCastingMode          = shadowCastingMode;
                     meshRenderer.motionVectorGenerationMode = motionVectorGenerationMode;
                     meshRenderer.probeAnchor = probeAnchor;
                 }
             }
         }
     }
 }