/// <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); }
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; } } } }
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); }
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); }
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(); } }
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++; } }
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++; } } }
/// <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; } }
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; }
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; }
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; } } }
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; } } } } }