private static void AddAutoEffect(TextureEffectDeploy deploy, GameObject model) { //添加效果 if (deploy.AutoRotation != null && deploy.AutoRotation.Length > 0) { //[方向,速度] var autoRota = model.AddComponent <AutoRotation>(); autoRota.RotaFoward = deploy.AutoRotation[0]; autoRota.TurnSpeed = deploy.AutoRotation[1]; } if (deploy.AutoScale != null && deploy.AutoScale.Length > 0) { //[最小,最大,速度] var autoScale = model.AddComponent <AutoScale>(); autoScale.MinScale = deploy.AutoScale[0]; autoScale.MaxScale = deploy.AutoScale[1]; autoScale.Speed = deploy.AutoScale[2]; } if (deploy.AutoGamma != null && deploy.AutoGamma.Length > 0) { //[最小,最大,速度] var autoGamma = model.AddComponent <AutoGamma>(); autoGamma.MinGamma = deploy.AutoGamma[0]; autoGamma.MaxGamma = deploy.AutoGamma[1]; autoGamma.Speed = deploy.AutoGamma[2]; } }
private static void CreateNewEffect(int id, int sortingOrder, TextureEffectDeploy deploy, CreatedNotify notify) { GameSystem.CoroutineStart(TextureUtility.LoadResourceById(deploy.resourceId, spriteList => { Holder holder; if (!CachePool.TryGetValue(id, out holder)) { holder = new Holder { Deploy = deploy, Resource = spriteList, Queue = new Queue <TextureEffect>() }; CachePool.Add(id, holder); } CreateEffectDirect(spriteList, sortingOrder, deploy, effect => { notify(effect); }); })); }
public virtual void Init(TextureEffectDeploy deploy, List <Sprite> spriteList) { Deploy = deploy; SpriteList = spriteList; ReInit(); }
private static void CreateEffectDirect(List <Sprite> spriteList, int sortingOrder, TextureEffectDeploy deploy, Action <TextureEffect> notify) { var type = typeof(TextureEffect); var resource = spriteList[0]; var _object = new GameObject("effect_" + deploy.id); _object.transform.localScale = deploy.scale * Vector3.one; var model = new GameObject("model"); model.transform.SetParent(_object.transform, false); model.AddComponent <MeshFilter>().sharedMesh = GameSystem.DefaultRes.QuadMesh; Material material; if (!_materialCache.TryGetValue(deploy.id, out material)) { material = new Material(GameSystem.DefaultRes.CommonShader) { mainTexture = resource.texture }; material.SetFloat("_AlphaScale", deploy.alpha); _materialCache[deploy.id] = material; } var mr = model.AddComponent <MeshRenderer>(); mr.sharedMaterial = material; model.transform.localEulerAngles = new Vector3(0, 0, deploy.rota); var sizeX = resource.bounds.size.x; var sizeY = resource.bounds.size.y; model.transform.localScale = new Vector3(sizeX, sizeY, 1); //添加自动效果 AddAutoEffect(deploy, model); var effect = _object.AddComponent(type) as TextureEffect; if (!effect) { Debug.LogError("CreateEffectDirect, Object is null 222"); Object.Destroy(_object); } else { effect.Renderer = mr; effect.Renderer.sortingOrder = sortingOrder; effect.Init(deploy, spriteList); } notify(effect); }