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(); }
public void Unload() { GameObjectUtils.DeleteChildren(this.transform, true); }