利用HudText来制作连击爆字
Posted xiaogeformax
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用HudText来制作连击爆字相关的知识,希望对你有一定的参考价值。
利用HudText来制作连击爆字
HudText简介
HudText是NGUI的一个插件,用来显示人物的名字和血条。可以跟随人物移动,在屏幕UI上显示该有的东西,我们今天利用这个插件里面的脚本来制作爆字的功能。
调用方法
每次调用的时候调用ADD这个函数就是可以的了。
第一次调用mList.Count == 0 里面的代码,生成一个Entry1的对象。
public void Add(int obj, Color c, float stayDuration)//颜色已经固定//
if (!enabled) return;
float time = Time.time;
int val = 1;
/////如果点击事件间隔小于一个值 则 刷新当前的entry的值 否则先删掉当前的entry,然后新建一个entry//
//点击间隔时间 = time - ent.movementStart//
// Create a new entry//
if (mList.Count == 0)
Entry1 ne2 = Create();
ne2.stay = stayDuration;
ne2.label.color = c;
ne2.val = obj;
ne2.label.text = ConvertToSpecNum(ne2.val.ToString(), fontname); //使用的bitmap图lianji//
timelast = ne2.time;
if (triggerAction != null) triggerAction(1);
else
Entry1 ne = mList[0];
float clickinterval = time - timelast;
int kicknumbernow = val;
if (clickinterval < combclickinterval) //如果点击事件小于设定的间隔,则连击数加一//
kicknumbernow = ne.val + obj;
else
kicknumbernow = obj;
if (triggerAction != null) triggerAction(kicknumbernow);
Entry1 ne2 = Create();
Delete(ne);
ne2.stay = stayDuration;
ne2.label.color = c;
ne2.val = kicknumbernow;
ne2.label.text = ConvertToSpecNum(ne2.val.ToString(), fontname);
//ne2.label.text = Mathf.RoundToInt (ne2.val);
timelast = ne2.time;
创建字体
前两次的mUnused.Count小于等于0,前两次不会调用这个里面的代码,后面就会去调用到这个里面的代码。
这里会使用两个Label 是为了一个创建,一个又生成,且把标签的数字改掉,成为轮流换的形式.类似于放入缓存池里面,不用创建新的对象的。
Entry1 Create()
// See if an unused entry can be reused
if (mUnused.Count > 0)
Entry1 ent = mUnused[mUnused.Count - 1];
mUnused.RemoveAt(mUnused.Count - 1);
ent.time = Time.time;
ent.label.depth = NGUITools.CalculateNextDepth(gameObject);
NGUITools.SetActive(ent.label.gameObject, true);
//ent.offset = 0f;
ent.offset_x = 0f;
ent.offset_y = 0f;
mList.Add(ent);
return ent;
// New entry
Entry1 ne = new Entry1();
ne.time = Time.time;
GameObject go = GameObject.Instantiate(headwordPrefab);
go.transform.SetParent(transform);
go.transform.localPosition = Vector3.zero;
go.SetActive(true);
ne.label = go.GetComponent<UILabel>();
//ne.label = NGUITools.AddWidget<UILabel>(gameObject);
ne.label.name = counter.ToString();
//ne.label.bitmapFont = bitmapFont;
ne.label.fontSize = fonts;
ne.label.fontStyle = fontStyle;
ne.label.applyGradient = applyGradient;
ne.label.gradientTop = gradientTop;
ne.label.gradientBottom = gradienBottom;
ne.label.effectStyle = effect;
ne.label.effectColor = effectColor;
ne.label.overflowMethod = UILabel.Overflow.ResizeFreely;
// Make it small so that it's invisible to start with
ne.label.cachedTransform.localScale = new Vector3(0.001f, 0.001f, 0.001f);
mList.Add(ne);
++counter;
return ne;
刷新里面的动画效果
对其中的字体进行动画的效果显示,这个是自己定义的动画的曲线,可以自己来使用特定的动画曲线。
void Update()
float time = Time.time;
//== 计算动画播放总时间
// Adjust alpha and delete old entries
for (int i = mList.Count; i > 0; )
Entry1 ent = mList[--i];
float currentTime = time - ent.time;
//float ct = currentTime;
//* totalEnd / ent.stay;
//ent.offset_y = comb.transform.position.y+0.5f;
//ent.offset_x = comb.transform.position.x+0.5f;
ent.offset_x = offsetCurve_x.Evaluate(currentTime)+35f;
ent.offset_y = offsetCurve_y.Evaluate(currentTime)-5f;
ent.label.alpha = alphaCurve.Evaluate(currentTime);
//ent.flyDirection.x * ent.flyDirection.y *
ent.label.cachedTransform.localPosition = new Vector3(ent.offset_x, ent.offset_y, 0);//本地坐标//
// Make the label scale in
float s = scaleCurve.Evaluate(time - ent.time);
//Debug.Log(time - ent.time +" "+ent.label.text);
if (s < 0.01f) s = 0.01f;
ent.label.cachedTransform.localScale = new Vector3(s, s, s);
//修改让文字和数字一起跳动。
comboWordSpriteObj.gameObject.transform.localScale = new Vector3(s, s, s);
comboLightSpriteObj.gameObject.transform.localScale = new Vector3(s, s, s);
////更改形状////////////////////////////////////////////////////////////
ent.label.depth = 10;
ent.label.spacingX = -5;//数字之间的间隔//
ent.label.pivot = UIWidget.Pivot.BottomLeft;//设定对齐方式为左下角//
//旋转角度//
//ent.label.transform.localEulerAngles=new Vector3(labelrotate_x,labelrotate_y,labelrotate_z);
// Delete the entry when needed
if (currentTime > ent.stay)
Delete(ent);
else
ent.label.enabled = true;
islabel = mList.Count;
if (islabel > 0)
comboWordSpriteObj.gameObject.SetActive(true);//使comb和light随着数字一起消失和出现//
comboLightSpriteObj.gameObject.SetActive(true);
else
comboWordSpriteObj.gameObject.SetActive(false);
comboLightSpriteObj.gameObject.SetActive(false);
以上是关于利用HudText来制作连击爆字的主要内容,如果未能解决你的问题,请参考以下文章