Exemple #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();
            }
Exemple #2
0
                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));
                    }
                }