EffectManager
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的更多相关文章
- FLEX 特效
一.简介: flex特效是ria应用程序的rich的重要组成部分. EffectManager类管理所有的特效实例以避免不必要的定时器和方法调用造成的内内存使用过大.一个效果由两部分组成:一是效果的E ...
- Unity目录结构设置
摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...
- Unity 笔记
摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...
随机推荐
- win32 右键弹出菜单
#define CW_ABOUT 100 #define CW_DOCUMENT 200 POINT t; GetCursorPos(&t); HMENU hMenu,hPopupMen ...
- Android InputStream转Bitmap
android socket服务端 接收Delphi socket客户端发来的图片,保存到bitmap中,代码如下: public static Bitmap readInputStreamToBit ...
- AC日记——pigs poj 1149
POJ - 1149 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include <iostream> # ...
- svn泄漏敏感信息利用方式
之前仅知道svn权限配置不当,会导致敏感信息泄漏,但是一直不知道具体利用方式. 今天测试svn dig时抓包分析才知道: http://www.xxx.com/路径/.svn/text-base/文件 ...
- Allocate exception for servlet XXX 基本异常
HTTP Status 500 - Error instantiating servlet class cn.tedu.servlet 错误!! 解决方案: 查看当前项目下的web.xm文件的真 ...
- 【互动问答分享】第11期决胜云计算大数据时代Spark亚太研究院公益大讲堂
Q1:docker成熟度如何? Docker是2013年和2014年最火爆的云计算开源项目: Baidu公司是中国使用Docker最为深入和最大规模的公司,线上稳定运行数十万个Docker容器,目前已 ...
- JS—正则表达式
正则表达式的元字符是包含特殊含义的字符,它们有一些特殊的功能,可以控制匹配模式的方式,反斜杠后的元字符失去其特殊含义. 单个字符和数字 .表示匹配除换行符外的单个字符,两个.就表示匹配两个字符 var ...
- DFS之奇偶剪枝
问题描述: 给定一个 N * M的迷宫+起点+终点 ,迷宫中有一些障碍无法穿过,问能否不重复也不停留地在刚好一共走 t 步出迷宫. 先上结论: 在理想情况下,s到e需要的最小步数为m=|ex-sx|+ ...
- 见微知著(二):解析ctf中的pwn--怎么利用double free
这次选2015年的0ctf的一道非常经典的pwn题,感觉这个题目作为练习题来理解堆还是很棒的. 运行起来,可以看出是一个实现类似于记事本功能的程序,就这一点而言,基本是套路了,功能都试一遍之后,就可以 ...
- 【bitset】hdu4920 Matrix multiplication
先把两个矩阵全都mod3. S[i][j][k]表示第i(0/1)个矩阵的行/列的第k位是不是j(1/2). 然后如果某两个矩乘对应位上为1.1,乘出来是1: 1.2:2: 2.1:2: 2.2:1. ...