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()
{
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()
@ -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>();
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<MeshFilter>();
meshRenderer = gameObject.AddComponent<MeshRenderer>();
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

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

2
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)]

Loading…
Cancel
Save