总结出两种方法:
1.克隆需要高亮和点击的控件
在需要引导的界面(一个panel),弹出引导界面(panel),此时引导界面覆盖其上,引导界面有一层半透明遮罩,遮罩上加boxcollider,屏蔽下层事件。
现在的关键就是将panel面板中的引导按钮高亮可点。将脚本挂到PanelGuide
效果图:
这种方法会有一些问题:1.因为按钮是拷贝的,所以按钮的位置不会再相对原来的父,原来按钮如果有自适应,就会出问题;2.按钮的响应函数中参数gameobject不再是同一个,而且如果原来的响应中调到了this,新的按钮中this也不再是同一个。
2.两个摄像机分别渲染两个层
注意的是,需要高亮的控件必须在一个panel下面,否则改变该控件的层不起作用(PanelBtn是一个panel)
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层
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)