Browse Source

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.
console
Nico de Poel 5 years ago
parent
commit
a52b497ccb
  1. 51
      Assets/Scripts/Game/Entity.cs
  2. 8
      Assets/Scripts/Game/GameAssets.cs
  3. 2
      Assets/Scripts/Support/AliasModelAnimator.cs

51
Assets/Scripts/Game/Entity.cs

@ -24,6 +24,21 @@ public class Entity
private void CreateGameObject() private void CreateGameObject()
{ {
gameObject = new GameObject($"Entity_{entityNum}"); gameObject = new GameObject($"Entity_{entityNum}");
skinnedMeshRenderer = gameObject.AddComponent<SkinnedMeshRenderer>();
skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off;
skinnedMeshRenderer.receiveShadows = false;
skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off;
skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
skinnedMeshRenderer.enabled = false;
meshFilter = gameObject.AddComponent<MeshFilter>();
meshRenderer = gameObject.AddComponent<MeshRenderer>();
meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
meshRenderer.receiveShadows = false;
meshRenderer.lightProbeUsage = LightProbeUsage.Off;
meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
meshRenderer.enabled = false;
} }
public void Destroy() public void Destroy()
@ -37,9 +52,21 @@ public class Entity
brushModel = null; brushModel = null;
worldModel = 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 // TODO: not sure if this is the right way to unlink world sub-models
gameObject.transform.DetachChildren(); gameObject.transform.DetachChildren();
@ -82,13 +109,13 @@ public class Entity
{ {
aliasModel.Animate(frameNum, out Mesh mesh, out float blendWeight); aliasModel.Animate(frameNum, out Mesh mesh, out float blendWeight);
if (skinnedMeshRenderer != null)
if (skinnedMeshRenderer.enabled)
{ {
skinnedMeshRenderer.sharedMesh = mesh; skinnedMeshRenderer.sharedMesh = mesh;
if (mesh != null && mesh.blendShapeCount > 0) if (mesh != null && mesh.blendShapeCount > 0)
skinnedMeshRenderer.SetBlendShapeWeight(0, blendWeight); skinnedMeshRenderer.SetBlendShapeWeight(0, blendWeight);
} }
else if (meshFilter != null)
else if (meshRenderer.enabled)
{ {
meshFilter.sharedMesh = mesh; meshFilter.sharedMesh = mesh;
} }
@ -112,23 +139,13 @@ public class Entity
var material = new Material(Shader.Find("Universal Render Pipeline/Simple Lit")); var material = new Material(Shader.Find("Universal Render Pipeline/Simple Lit"));
if (aliasModel.IsAnimated) if (aliasModel.IsAnimated)
{ {
skinnedMeshRenderer = gameObject.AddComponent<SkinnedMeshRenderer>();
skinnedMeshRenderer.material = material; skinnedMeshRenderer.material = material;
skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off;
skinnedMeshRenderer.receiveShadows = false;
skinnedMeshRenderer.lightProbeUsage = LightProbeUsage.Off;
skinnedMeshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
skinnedMeshRenderer.enabled = true;
} }
else else
{ {
meshFilter = gameObject.AddComponent<MeshFilter>();
meshRenderer = gameObject.AddComponent<MeshRenderer>();
meshRenderer.material = material; meshRenderer.material = material;
meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
meshRenderer.receiveShadows = false;
meshRenderer.lightProbeUsage = LightProbeUsage.Off;
meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
meshRenderer.enabled = true;
} }
} }
} }

8
Assets/Scripts/Game/GameAssets.cs

@ -29,8 +29,14 @@ public class GameAssets
texNum = nextTexNum++; texNum = nextTexNum++;
} }
if (textures.ContainsKey(texNum))
{
Object.Destroy(textures[texNum]);
textures.Remove(texNum);
}
textures[texNum] = texture;
textures.Add(texNum, texture);
return texNum; return texNum;
} }

2
Assets/Scripts/Support/AliasModelAnimator.cs

@ -6,7 +6,7 @@ public class AliasModelAnimator : MonoBehaviour
public AliasModel aliasModel; public AliasModel aliasModel;
[SerializeField] [SerializeField]
private bool lerpMove = true;
private bool lerpMove = false;
[SerializeField] [SerializeField]
[Range(1, 20)] [Range(1, 20)]

Loading…
Cancel
Save