Example #1
0
            private void Awake()
            {
                //Create a reference prefab that will be used to render them
                {
                    _referencePrefab = _prefab.LoadAndInstantiatePrefab(this.transform);
                    _referencePrefab.SetActive(false);

                    _skinnedMeshes = _referencePrefab.GetComponentsInChildren <SkinnedMeshRenderer>();
                    _materials     = new Material[_skinnedMeshes.Length][];

                    for (int i = 0; i < _skinnedMeshes.Length; i++)
                    {
                        _materials[i] = _skinnedMeshes[i].materials;

                        for (int j = 0; j < _materials[i].Length; j++)
                        {
                            _animationTexture.SetMaterialProperties(_materials[i][j]);
                        }
                    }
                }

                //Create stripped down clone that will be instantiated
                {
                    _clone = _prefab.LoadAndInstantiatePrefab(this.transform);
                    _clone.SetActive(false);

                    if (_stripInstanceChildren)
                    {
                        //Delete all skinned meshes
                        SkinnedMeshRenderer[] skinnedMeshes = _clone.GetComponentsInChildren <SkinnedMeshRenderer>();

                        for (int i = 0; i < skinnedMeshes.Length; i++)
                        {
                            skinnedMeshes[i].enabled         = false;
                            skinnedMeshes[i].sharedMesh      = null;
                            skinnedMeshes[i].sharedMaterials = new Material[0];

                            //Delete bones too
                            GameObjectUtils.DeleteChildren(skinnedMeshes[i].rootBone);
                        }
                    }
                }

                //Init data
                _renderedObjects = new List <RenderData>(kMaxMeshes);
                _instanceData    = new InstanceData[kMaxMeshes];
                _renderData      = new RenderData[kMaxMeshes];
                for (int i = 0; i < _renderData.Length; i++)
                {
                    _renderData[i] = new RenderData();
                }
                _renderedObjectTransforms = new Matrix4x4[kMaxMeshes];
                _currentFrame             = new float[kMaxMeshes];

                _propertyBlock = new MaterialPropertyBlock();
            }
Example #2
0
 public void Unload()
 {
     GameObjectUtils.DeleteChildren(this.transform, true);
 }