前言
UIFollowTarget:
Target表示的是所要跟随的3D物体,一般是跟随在该物体正中心,所以为了使其跟随在物体顶部,一般做法是在物体下面创建子物体,然后让子物体位于父物体的顶部,把目标设置为子物体,这样就能实现跟随在父物体的顶部了。
Game Camera表示渲染Target的Camera,一般来说都是Main Camera。
然后在UI Root面板下面有个Camera
NGUI名字跟随、伤害显示、血条和miss效果的制作
该Camera的Layer为空,所有UIRoot下的NGUI物体都为空,所要该Camera是负责渲染NGUI物体,UiCamera则是它。添加了UIFollowTarget的任何一个NGUI控件,会跟随某3D物体。
HUDText:
用于显示所需要显示的字体,从上至下的属性名称依次为:
动态字体、静态字体、字体大小、字体风格、应用渐变、渐变字体顶部颜色、
渐变字体底部颜色、字体效果、字体效果的颜色、偏移曲线、透明度曲线和大小变幻曲线
大致实现掉血的分数思路
- 制作UI流血特效,做成预制体
- 制作生成UI特效预支体的特效位置(然后使用UIFollowTarget让其跟踪敌人对象上)
- 制作敌人预制体,敌人预支体上有个空物体,这个空物体就是特效预支体要跟随的敌人对象的具体位置
- 做生成多个敌人来进行测试
制作流程
创建对象
一个是HudParent空物体,做特效生成父物体位置
一个是HudEffect空物体, UI特效 (做成预制体),包含一个HPSprite子物体对象
一个Enemy对象, 做场景敌人 (做成预制体),包含一个孩子空物体做特效的位置
一个空物体对象Span,用来生成敌人添加脚本
这里写3个脚本,两个制作好的组件
- 给HudEffect添加两个组件HUDText,UIFollowTarget。给脚本HUDText的TrueTypeFont属性添加一个字体。
- 给HudParent写一个HudParent脚本,为了方面找到该物体对象,做成单例
- 给Span写一个创建敌人脚本CreateEnemy
- 给敌人写一个简单的检测掉血脚本Enemy
脚本代码
这里只列出主要的敌人脚本,每次生成敌人都会创建一个血量特效UI,让其跟随敌人的头上位置(子空物体),接着通过鼠标移动,控制HUDText 来控制血量丢失的文字Label显示
using UnityEngine;
using System.Collections;
public class MyEnemy : MonoBehaviour {
public GameObject _enemyEffectPrefabs;
GameObject _effectFollowTarget;
GameObject _enemyHudEffect;
UIProgressBar _effectHPProgress;
float HP = 50;
void Start(){
_effectFollowTarget = transform.Find ("HudPosition").gameObject;
//血条特效是UI,需要在UI层设置位置,创建gameObject
_enemyHudEffect = NGUITools.AddChild (HudPosition._instance.gameObject, _enemyEffectPrefabs);
//但是特效UI镜头要根据实际的敌人身上 ,camera如何理解?
_enemyHudEffect.GetComponent<UIFollowTarget> ().target = _effectFollowTarget.transform;
//找到特效位置
_effectHPProgress = _enemyHudEffect.transform.Find ("HPSprite").GetComponent<UIProgressBar> ();
_effectHPProgress.value = 1;
}
void OnMouseEnter(){
Debug.Log (this.gameObject.name);
_enemyHudEffect.GetComponent<HUDText> ().Add ("-10", Color.red, 0.3f);
HP -= 10;
float hpValue = HP / 50.0f;
_effectHPProgress.value = hpValue;
if (HP <= 0) {
Destroy (gameObject);
}
}
}