@ -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 ;
}
}
}
}
}
}