unity3d ngui3.7 新手引导遮罩和高亮实现

总结出两种方法:
1.克隆需要高亮和点击的控件
在需要引导的界面(一个panel),弹出引导界面(panel),此时引导界面覆盖其上,引导界面有一层半透明遮罩,遮罩上加boxcollider,屏蔽下层事件。

需要加引导的界面:


加引导以后的界面:

现在的关键就是将panel面板中的引导按钮高亮可点。将脚本挂到PanelGuide

using UnityEngine ;
using System .Collections ;
using DG .Tweening ;

public class PanelGuide : MonoBehaviour {

//需要高亮可点的控件
public GameObject highlight ;

//按钮的回调
UIEventListener. VoidDelegate callback ;

void Start () { 
moveHighlight ();
}

void moveHighlight ()
{
//克隆这个控件
GameObject CopyObject = Instantiate (highlight ) as GameObject ;
//将两个控件设置成一个父级
CopyObject .transform .parent = highlight .transform .parent ;
//设置其坐标,角度,大小
CopyObject .transform .localPosition = highlight .transform .localPosition ;
CopyObject .transform .localRotation = highlight .transform .localRotation ;
CopyObject .transform .localScale = highlight .transform .localScale ;
//将克隆的控件,移动至箭头窗口下,transform(箭头窗口)
CopyObject .transform .parent = transform ;
//加个动画
CopyObject .transform .DOScale (new Vector3 (1.1f, 1.1f, 1.1f), 0.2f).SetLoops (-1);

UIButton cpyBtn = CopyObject .GetComponent <UIButton >();
UIButton btn = highlight .GetComponent <UIButton >();
//得到原来按钮的回调事件
callback = UIEventListener .Get (btn .gameObject ).onClick ;
UIEventListener .Get (cpyBtn .gameObject ).onClick += onCopyBtnClick ;
}

public void onCopyBtnClick (GameObject go )
{
print( "onCopyBtnClick!" );
//其他的按钮操作,如关闭引导界面
//TODO...

//原按钮的事件
if( callback != null )
callback (go );
}
}


效果图:

这种方法会有一些问题:1.因为按钮是拷贝的,所以按钮的位置不会再相对原来的父,原来按钮如果有自适应,就会出问题;2.按钮的响应函数中参数gameobject不再是同一个,而且如果原来的响应中调到了this,新的按钮中this也不再是同一个。

2.两个摄像机分别渲染两个层

UI摄像机渲染UI层,panel面板在UI层;引导面板下面建一个摄像机(CameraGuide),depth更高,渲染另外一个层(UIEffect),引导面板在UIEffect层


引导面板上挂一个脚本,动态改变panel面板中需要高亮的控件

using UnityEngine ;
using System .Collections ;
using DG .Tweening ;

public class CameraGuide : MonoBehaviour {

//需要高亮可点的控件
public GameObject highlight ; //PanelBtn

void Start () {
StartCoroutine ( setCameraGuideLayer ());
}

IEnumerator setCameraGuideLayer ()
{
yield return null;
highlight .layer = LayerMask .NameToLayer ("UIEffect" );
}

}



注意的是,需要高亮的控件必须在一个panel下面,否则改变该控件的层不起作用(PanelBtn是一个panel)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值