因为这几天工作上的需要,研究了下用UGUI制作新手指引。可以实现这个效果的方法有很多,都用了一遍,最后还是感觉这个方法比较好。我们需要创建一个画布,然后在画布下创建需要新手指引用到的按钮,






然后在需要新手指引的按钮上加2个组件,一个是 Graphic Raycaster 和Canvas ,Graphic Raycaster是用来是否接受可以交互的,Canvas是改变显示的,记得我们这里需要一个遮罩,就用一个Image来做吧

然后我们给这个4个按钮都加上这2个组件,因为这里我是测试所以我需要一运行游戏就有一个按钮是高亮状态,所以我这里用代码控制了下,然后我们这里还需要一个新手指引里面的手势指示,这个是实例化出来的。

绑定脚本UI控制器里面效果图














下面是测试代码:

using UnityEngine;

using UnityEngine.UI;

using System.Collections;

using System.Collections.Generic;


public class NewbieGuideTest : MonoBehaviour

{

public bool IsGuider = false;

public Image Instructions;

public List<Button> GuideBtn;

void Start()

{

Image go = GameObject.Instantiate(Instructions) as Image;

go.transform.SetParent(GuideBtn[0].transform);

go.transform.localPosition = Vector3.zero;

go.transform.localScale = Vector3.one;

//GuideBtn[0].GetComponent<Canvas>().overrideSorting = true;

GuideBtn[0].GetComponent<Canvas>().sortingOrder = 4;

}


public void BeginGuide(int value)

{

switch (value)

{

case 0:

Destroy(GameObject.Find("InstructionsImage(Clone)"));

ChangGuideBtn(value);

GenerateInstructions(value);

break;

case 1:

Destroy(GameObject.Find("InstructionsImage(Clone)"));

ChangGuideBtn(value);

GenerateInstructions(value);

break;

case 2:

Destroy(GameObject.Find("InstructionsImage(Clone)"));

ChangGuideBtn(value);

GenerateInstructions(value);


break;

case 3:


break;

}

}


public void GenerateInstructions(int value)

{

Image go = GameObject.Instantiate(Instructions) as Image;

go.transform.SetParent(GuideBtn[value+1].transform);

go.transform.localPosition = Vector3.zero;

go.transform.localScale = Vector3.one;

}



public void ChangGuideBtn(int value)

{


GuideBtn[value].GetComponent<Canvas>().overrideSorting = false;

GuideBtn[value].GetComponent<Canvas>().sortingOrder = -1;

GuideBtn[value + 1].GetComponent<Canvas>().overrideSorting = true;

GuideBtn[value + 1].GetComponent<Canvas>().sortingOrder = 2;

}



}

效果图:
























其他做法还有 改变深度,方法是SetSiblingIndex 还有一个组件也可以Canvas Group,具体大家可以去看下API,这些组件的用法 。