转自:http://blog.csdn.net/yongh701/article/details/70185467
作者:yongh701
对话框在任何一个地方都随处可见,在游戏里面也肯定不例外啊,那么在Unity3D如何利用UGUI实现一个对话框呢?并且这个对话框可以任意拖拽,更重要的是,我可以想让它显示就显示,隐藏就隐藏,就是一个模态框Modal的样子,如下图所示:
![](https://img-blog.csdn.net/20170415165828090)
其实也并不难啊,首先是UI的布置,具体可以参考《【Unity3D】公告栏与开始界面的布置》(点击打开链接)这里就不再赘述了,在Canvas上面,有一个Button、一个Text(并且改名为notice)作提示信息,还有一个image也就是这个对话框,上面有2个text,2个button。如下图所示。
![](https://img-blog.csdn.net/20170415170306238)
之后我们编写如下的脚本,赋予image,怎么写脚本,怎么赋予对象在《【Unity3D】Helloworld》(点击打开链接)说过了,这里不再赘述了。
- using UnityEngine;
- using UnityEngine.UI;
- using System.Collections;
-
- public class image : MonoBehaviour
- {
-
- GameObject text;
- public static Vector3 vec3, pos;
-
-
- void Start()
- {
- text = GameObject.Find("notice");
- text.SetActive(false);
- gameObject.SetActive(false);
- }
-
-
- void Update()
- {
-
- }
-
-
- public void PointerDown()
- {
- vec3 = Input.mousePosition;
- pos = transform.GetComponent<RectTransform>().position;
- }
-
-
- public void Drag()
- {
- Vector3 off = Input.mousePosition - vec3;
-
-
- vec3 = Input.mousePosition;
- pos = pos + off;
- transform.GetComponent<RectTransform>().position = pos;
- }
-
-
- public void onShow()
- {
- gameObject.SetActive(true);
- }
-
-
- public void onOK()
- {
- text.SetActive(true);
- GameObject.Find("notice").GetComponent<Text>().text = "你点击了确定!";
- gameObject.SetActive(false);
- }
-
-
- public void onCancel()
- {
- text.SetActive(true);
- GameObject.Find("notice").GetComponent<Text>().text = "你点击了取消!";
- gameObject.SetActive(false);
- }
- }
之后,我们将对这个image设置一个鼠标按下事件和鼠标拖拽事件,如下图所示。
![](https://img-blog.csdn.net/20170415171530693)
之后和《【Unity3D】场景切换、UGUI组件事件、开始游戏与关闭游戏》(点击打开链接)一样,在Pointer Down事件中指明函数是image中的PointerDown,Drag就是image.Drag,如下图所示:
![](https://img-blog.csdn.net/20170415171657718)
最后,对于其余各个Button指明相应的onClick事件,保存场景,发布,完成!
![](https://img-blog.csdn.net/20170415171922589)