using UnityEngine;
using System.Collections; public class EffectManager : MonoBehaviour { public Animator[] Animators;
public float amplify;
public float curAmplify;
public float totalEffectDelayTime;
public Transform MoveTarget; public ParticleEffect particleEffect;
public AnimatorOffsetChangeEffect animatorOffsetChangeEffect;
public AnimatorMeshChangeEffect animatorMeshChangeEffect;
public enum EffectType
{
Particles,
AnimatorOffsetChange,
AnimatorMeshChange
} public EffectType effectType; void Start ()
{
SetEffectSpeed();
EffectMoveToTarget();
} void Update ()
{ } void OnEnable()
{
if (animatorOffsetChangeEffect.middleEffectNode.rootNode != null)
{
animatorOffsetChangeEffect.middleEffectNode.rootNode.transform.position =
animatorOffsetChangeEffect.frontEffectNode.rootNode.transform.position;
animatorOffsetChangeEffect.middleEffectNode.rootNode.SetActive(true);
}
Start();
} private bool isFirst = true;
public void SetEffectSpeed()
{
//for (int i = 0; i < ParticlesSetStartDelay.Length; i++) {
// ParticlesSetStartDelay[i].startDelay /=amplify;
//} //for (int i = 0; i < ParticlesSetDuration.Length; i++) {
// ParticlesSetDuration[i].startLifetime /=amplify;
//} if (isFirst)
{
isFirst = false;
}
else
return;
Effect effect; if (effectType == EffectType.Particles)
{
effect = particleEffect;
if (effect.middleEffectNode != null)
{
for (int i = ; i < effect.middleEffectNode.Particles.Length; i++)
{
effect.middleEffectNode.Particles[i].startSpeed *= amplify;
}
} }
else if (effectType == EffectType.AnimatorOffsetChange)
{ effect = animatorOffsetChangeEffect;
for (int i = ; i < Animators.Length; i++)
{
Animators[i].speed *= amplify;
}
if (effect.middleEffectNode != null)
{
effect.middleEffectNode.durationTime /= amplify;
effect.middleEffectNode.startDelayTime /= amplify;
} }
else
{
effect = animatorMeshChangeEffect;
for (int i = ; i < Animators.Length; i++)
{
Animators[i].speed *= amplify;
} }
if (effect.frontEffectNode != null)
{
for (int i = ; i < effect.frontEffectNode.Particles.Length; i++)
{
effect.frontEffectNode.Particles[i].startDelay /= amplify;
effect.frontEffectNode.Particles[i].startLifetime /= amplify;
}
}
if (effect.lastEffectNode != null)
{
for (int i = ; i < effect.lastEffectNode.Particles.Length; i++)
{
effect.lastEffectNode.Particles[i].startDelay /= amplify;
effect.lastEffectNode.Particles[i].startLifetime /= amplify;
}
}
} public void EffectMoveToTarget()
{
if (effectType == EffectType.Particles)
{
particleEffect.EffectMoveToTarget(MoveTarget);
}
else if (effectType == EffectType.AnimatorOffsetChange)
{
animatorOffsetChangeEffect.EffectMoveToTarget(MoveTarget);
}
else
{
animatorMeshChangeEffect.EffectMoveToTarget(MoveTarget);
}
//Debug.Log(frontEffectTime);
//Hashtable args = new Hashtable();
//args.Add("position", MoveTarget.position);
//args.Add("time", middleEffectTime);
//args.Add("delay", frontEffectTime);
//args.Add("easeType", iTween.EaseType.easeInQuad); ////args.Add("isLocal", true);
//iTween.MoveTo(MiddleEffect, args);
//LastEffect.transform.position = MoveTarget.transform.position;
}
private void middleEffectNodeReachEvent()
{
animatorOffsetChangeEffect.middleEffectNode.rootNode.SetActive(false);
}
} [System.Serializable]
public class EffectNode
{
public GameObject rootNode;
public ParticleSystem[] Particles;
public float startDelayTime;
public float durationTime;
} public abstract class Effect
{
public EffectNode frontEffectNode;
public EffectNode middleEffectNode;
public EffectNode lastEffectNode; public abstract void EffectMoveToTarget(Transform target); } [System.Serializable]
public class AnimatorOffsetChangeEffect : Effect
{
public override void EffectMoveToTarget(Transform target)
{
//middleEffectNode.rootNode.transform.LookAt(target);
Hashtable args = new Hashtable();
args.Add("position", target.position);
args.Add("time", middleEffectNode.durationTime);
args.Add("delay", middleEffectNode.startDelayTime);
args.Add("easeType", iTween.EaseType.linear);
//args.Add("looktarget", target.position);
if (isHideMiddle)
{
args.Add("oncomplete", "middleEffectNodeReachEvent");
args.Add("oncompletetarget", frontEffectNode.rootNode.transform.parent.gameObject);
}
iTween.MoveTo(middleEffectNode.rootNode, args);
lastEffectNode.rootNode.transform.position = target.position;
} public bool isHideMiddle;
} [System.Serializable]
public class ParticleEffect : Effect
{
public override void EffectMoveToTarget(Transform target)
{
middleEffectNode.rootNode.transform.LookAt(target);
float dis = Vector3.Distance(frontEffectNode.rootNode.transform.position, target.position);
middleEffectNode.Particles[].startSpeed = dis / middleEffectNode.durationTime;
lastEffectNode.rootNode.transform.position = target.position;
}
} [System.Serializable]
public class AnimatorMeshChangeEffect : Effect
{
public override void EffectMoveToTarget(Transform target)
{
Vector3 dirV = (target.position - middleEffectNode.rootNode.transform.position).normalized;
middleEffectNode.rootNode.transform.right = dirV;
lastEffectNode.rootNode.transform.position = target.position; }
}
using UnityEngine;
using System.Collections; public class ShowParticleCout : MonoBehaviour {
//定义发射器组件
//粒子数量接受变量
ParticleSystem a = null;
public int banjing=;
int a_particleCout=;
// Use this for initialization
void Start () {
a = GetComponent<ParticleSystem>();
} // Update is called once per frame
void Update () {
if(a !=null){
//Debug.Log("粒子数:"+ a.particleCount);
a_particleCout=a.particleCount;
}
}
public int getParticleCout(){
//返回粒子数
return a_particleCout;
}
void OnGUI() {
string showParticleCout = "粒子数是:" + a_particleCout;
GUI.Label(new Rect(, ,showParticleCout.Length * , ),showParticleCout +"\r\n asdfasdfa" );
} }
using UnityEngine;
using System.Collections; public class Delay : MonoBehaviour { public float delayTime = 1.0f; // Use this for initialization
void Start () {
gameObject.SetActiveRecursively(false);
Invoke("DelayFunc", delayTime);
} void DelayFunc()
{
gameObject.SetActiveRecursively(true);
} }

EffectManager的更多相关文章

  1. FLEX 特效

    一.简介: flex特效是ria应用程序的rich的重要组成部分. EffectManager类管理所有的特效实例以避免不必要的定时器和方法调用造成的内内存使用过大.一个效果由两部分组成:一是效果的E ...

  2. Unity目录结构设置

    摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...

  3. Unity 笔记

    摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...

随机推荐

  1. 微信支付http://www.cnblogs.com/True_to_me/p/3565039.html

    公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需 ...

  2. debian 更换sh的默认链接为bash

    https://blog.csdn.net/mudongliangabcd/article/details/43458895

  3. WIN7下使用sublime text3替代arduino IDE(安装方法和所遇到的问题)

    用了一段时间Arduino IDE,感觉比较简陋~~很多功能都没有~虽然不影响使用啦~(主要是启动速度有点慢...我的破笔记本….), 网上搜寻了下,发现sublime text有插件可以替代,这就比 ...

  4. asp.net数据类型--泛型

    asp.net有很多的数据类型,同时c#等均是强数据类型,在使用的过程,存在因数据类型不一致,在编译时通过,在使用过程中出错的情况,因此从2.0起,增加泛型这种类型.这种类型,在定义时不指定类型,而在 ...

  5. HDU 2102 A计划【三维BFS】

    A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  6. 12、Django实战第12天:课程机构列表页数据展示

    今天完成的是课程机构列表页.... 1.启动服务,进入xadmin后,添加5个城市信息用作测试数据 2.添加课程机构,其中有一项要上传封面图的地方要注意 封面图上传路径是我们在models中设置好的 ...

  7. 位运算和enum中的位运算

    1.位逻辑非运算 ~ 位逻辑非运算是单目的,只有一个运算对象.位逻辑非运算按位对运算对象的值进行非运算,即:如果某一位等于0,就将其转变为1:如果某一位等于1,就将其转变为0. 比如,对二进制的100 ...

  8. 算法-桶排序(Bucket sort)

    本文由@呆代待殆原创,转载请注明出处. 简介:这个排序算法不属于比较排序,在平均情况下他的时间代价是O(n),并且它假设它的输入数据均匀的分布在一个固定的区间里. 思路:桶排序假设他的输入均匀的分布在 ...

  9. [CTSC2017]最长上升自序列(伪题解)(Dilworth's theorem+网络流)

    部分分做法很多,但每想出来一个也就多5-10分.正解还不会,下面是各种部分分做法: Subtask 1:k=1 LCS长度最长为1,也就是说不存在j>i和a[j]>a[i]同时成立.显然就 ...

  10. [xsy1100]东舰停战不可避

    没有三点共线 这题的思想来源于JOI2011-2012春季训练合宿Day2T2,原题是个大毒瘤题(p.s.场上有人A,真的可怕),这题作为原题要用到的的一个结论而存在 点有两种颜色,先考虑对所有点做凸 ...