那麽應該怎樣做呢?比較常見及簡單的方法就是高亮相關的按鈕,加上箭頭/手指/對話框指示玩家(只能)按下這個按鈕,然後不斷重複這個動作在不同按鈕上,直至新手引導完成。簡單效果大約是這樣:
應該怎樣去達成這個效果呢?
流程如下:
1. 建立一個蒙版放在所有按鈕之上(我命名為BlockPanel),用來防止玩家按下其他按鈕
2. 複製相關按鈕,把箭頭/手指放在按鈕旁邊
3. 把按鈕放在蒙版圖層之上
4. 箭頭/手指製作移動動畫,提示玩家(只能)按這裏
5. 複雜下一個按鈕,如此類推......
代碼如下:
public void BeginnerGuide()
{
GameObject beginnerGuide = GameObject.Find("BeginnerGuide");
GameObject guideArrow = GameObject.Find ("GuideArrow");
Button InfoButton= GameObject.Find ("Btn_Info");
Button _copyInfoButton = Instantiate(InfoButton) as Button;
_copyInfoButton.transform.parent = InfoButton.transform.parent;
_copyInfoButton.transform.localPosition = InfoButton.transform.localPosition ;
_copyInfoButton.transform.localRotation = InfoButton.transform.localRotation ;
_copyInfoButton.transform.localScale = InfoButton.transform.localScale;
_copyInfoButton.transform.parent = beginnerGuide.transform;
BlockPanel.SetActive(true);
guideArrow.transform.localPosition = InfoButton.transform.localPosition + new Vector3(100, 0, 0);
guideArrow.transform.DOMoveX(100, 1).SetLoops(-1, LoopType.Yoyo);
}
順帶一提,複製按鈕後記得先把它的 Parent 設定為在被複製按鈕的 Parent, 不然的話就算把位置等等於被複製按鈕也會走位喔
箭頭/手指的移動動畫是用了DoTween插件,DoShakePosition是它的其中一個功能,有興趣可以看看它的官網:
uGui(即Canvas下)的排序有圖層的意義,較下的物件代表較上的圖層,所以把蓋起整個畫面BlockPanel放在下面可以遮擋較上按鈕的功能~
進階版就是不斷Call BeginnerGuide(String btnName),每次把btnName換成你想要的按鈕,直至你的引導完成。最後跟BeginnerGuide這個Panel說再見~
(當然複製的按鈕你也可以先一步用完即棄 XD)
public void BeginnerGuide(String btnName)
{
GameObject beginnerGuide = GameObject.Find("BeginnerGuide");
GameObject guideArrow = GameObject.Find ("GuideArrow");
Button targetButton= GameObject.Find ("btnName");
Button _copyTargetButton = Instantiate(targetButton) as Button;
_copyTargetButton.transform.parent = targetButton.transform.parent;
_copyTargetButton.transform.localPosition = targetButton.transform.localPosition ;
_copyTargetButton.transform.localRotation = targetButton.transform.localRotation ;
_copyTargetButton.transform.localScale = targetButton.transform.localScale;
_copyTargetButton.transform.parent = beginnerGuide.transform;
BlockPanel.SetActive(true);
guideArrow.transform.localPosition = targetButton.transform.localPosition + new Vector3(100, 0, 0);
guideArrow.transform.DOMoveX(100, 1).SetLoops(-1, LoopType.Yoyo);
}
當然方法不止一種,這只是小弟想到的方法而已!大家如果有其他甚至更好製作新手引導的方法歡迎交流喔~
沒有留言:
發佈留言