From a52b497ccbb5ee6945cf1f2c471d3c55dbaaa197 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Wed, 14 Jul 2021 10:44:00 +0200 Subject: [PATCH] Reworked entity renderer assignment: both MeshRenderer and SkinnedMeshRenderer are created at the same time on init, and are enabled/disabled on demand. Also: destroy overridden textures, and disable lerping on alias model animator by default. --- Assets/Scripts/Game/Entity.cs | 51 +++++++++++++------- Assets/Scripts/Game/GameAssets.cs | 8 ++- Assets/Scripts/Support/AliasModelAnimator.cs | 2 +- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/Assets/Scripts/Game/Entity.cs b/Assets/Scripts/Game/Entity.cs index 1edcbd7..13a2e90 100644 --- a/Assets/Scripts/Game/Entity.cs +++ b/Assets/Scripts/Game/Entity.cs @@ -24,6 +24,21 @@ public class Entity private void CreateGameObject() { gameObject = new GameObject($"Entity_{entityNum}"); + + skinnedMeshRenderer = gameObject.AddComponent(); + skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off; + skinnedMeshRenderer.receiveShadows = false; + skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off; + skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; + skinnedMeshRenderer.enabled = false; + + meshFilter = gameObject.AddComponent(); + meshRenderer = gameObject.AddComponent(); + meshRenderer.shadowCastingMode = ShadowCastingMode.Off; + meshRenderer.receiveShadows = false; + meshRenderer.lightProbeUsage = LightProbeUsage.Off; + meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; + meshRenderer.enabled = false; } public void Destroy() @@ -37,9 +52,21 @@ public class Entity brushModel = null; worldModel = null; - Object.Destroy(meshFilter); - Object.Destroy(meshRenderer); - Object.Destroy(skinnedMeshRenderer); + skinnedMeshRenderer.sharedMesh = null; + if (skinnedMeshRenderer.material != null) + { + Object.Destroy(skinnedMeshRenderer.material); + skinnedMeshRenderer.material = null; + } + skinnedMeshRenderer.enabled = false; + + meshFilter.sharedMesh = null; + if (meshRenderer.material != null) + { + Object.Destroy(meshRenderer.material); + meshRenderer.material = null; + } + meshRenderer.enabled = false; // TODO: not sure if this is the right way to unlink world sub-models gameObject.transform.DetachChildren(); @@ -82,13 +109,13 @@ public class Entity { aliasModel.Animate(frameNum, out Mesh mesh, out float blendWeight); - if (skinnedMeshRenderer != null) + if (skinnedMeshRenderer.enabled) { skinnedMeshRenderer.sharedMesh = mesh; if (mesh != null && mesh.blendShapeCount > 0) skinnedMeshRenderer.SetBlendShapeWeight(0, blendWeight); } - else if (meshFilter != null) + else if (meshRenderer.enabled) { meshFilter.sharedMesh = mesh; } @@ -112,23 +139,13 @@ public class Entity var material = new Material(Shader.Find("Universal Render Pipeline/Simple Lit")); if (aliasModel.IsAnimated) { - skinnedMeshRenderer = gameObject.AddComponent(); skinnedMeshRenderer.material = material; - skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off; - skinnedMeshRenderer.receiveShadows = false; - skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off; - skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; + skinnedMeshRenderer.enabled = true; } else { - meshFilter = gameObject.AddComponent(); - meshRenderer = gameObject.AddComponent(); meshRenderer.material = material; - - meshRenderer.shadowCastingMode = ShadowCastingMode.Off; - meshRenderer.receiveShadows = false; - meshRenderer.lightProbeUsage = LightProbeUsage.Off; - meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off; + meshRenderer.enabled = true; } } } diff --git a/Assets/Scripts/Game/GameAssets.cs b/Assets/Scripts/Game/GameAssets.cs index 015dd7d..d43523e 100644 --- a/Assets/Scripts/Game/GameAssets.cs +++ b/Assets/Scripts/Game/GameAssets.cs @@ -29,8 +29,14 @@ public class GameAssets texNum = nextTexNum++; } + + if (textures.ContainsKey(texNum)) + { + Object.Destroy(textures[texNum]); + textures.Remove(texNum); + } - textures[texNum] = texture; + textures.Add(texNum, texture); return texNum; } diff --git a/Assets/Scripts/Support/AliasModelAnimator.cs b/Assets/Scripts/Support/AliasModelAnimator.cs index f0380d0..59c7f22 100644 --- a/Assets/Scripts/Support/AliasModelAnimator.cs +++ b/Assets/Scripts/Support/AliasModelAnimator.cs @@ -6,7 +6,7 @@ public class AliasModelAnimator : MonoBehaviour public AliasModel aliasModel; [SerializeField] - private bool lerpMove = true; + private bool lerpMove = false; [SerializeField] [Range(1, 20)]