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(); }
private void Update() { #if UNITY_EDITOR for (int i = 0; i < _materials.Length; i++) { _animationTexture.SetMaterialProperties(_materials[i]); } #endif Render(Camera.main); }
protected override void InitialiseIfNeeded() { base.InitialiseIfNeeded(); if (_particleCustomData == null) { for (int i = 0; i < _materials.Length; i++) { _animationTexture.SetMaterialProperties(_materials[i]); } _particleCurrentFrame = new float[_particles.Length]; _particleCustomData = new List <Vector4>(_particles.Length); ParticleSystem.CustomDataModule customData = _particleSystem.customData; customData.SetMode(_customDataChannel, ParticleSystemCustomDataMode.Vector); customData.SetVector(_customDataChannel, 0, new ParticleSystem.MinMaxCurve(kDefaultData.x)); customData.SetVector(_customDataChannel, 1, new ParticleSystem.MinMaxCurve(kDefaultData.y)); customData.SetVector(_customDataChannel, 2, new ParticleSystem.MinMaxCurve(kDefaultData.z)); customData.SetVector(_customDataChannel, 3, new ParticleSystem.MinMaxCurve(kDefaultData.w)); } }