【Unity3D】对话框、隐藏与显示、拖拽

转自:http://blog.csdn.net/yongh701/article/details/70185467

作者:yongh701

对话框在任何一个地方都随处可见,在游戏里面也肯定不例外啊,那么在Unity3D如何利用UGUI实现一个对话框呢?并且这个对话框可以任意拖拽,更重要的是,我可以想让它显示就显示,隐藏就隐藏,就是一个模态框Modal的样子,如下图所示:


其实也并不难啊,首先是UI的布置,具体可以参考《【Unity3D】公告栏与开始界面的布置》(点击打开链接)这里就不再赘述了,在Canvas上面,有一个Button、一个Text(并且改名为notice)作提示信息,还有一个image也就是这个对话框,上面有2个text,2个button。如下图所示。


之后我们编写如下的脚本,赋予image,怎么写脚本,怎么赋予对象在《【Unity3D】Helloworld》(点击打开链接)说过了,这里不再赘述了。

[csharp]  view plain  copy
  1. using UnityEngine;  
  2. using UnityEngine.UI;//犹如我们要获取一个text并操作,所以需要这个头文件  
  3. using System.Collections;  
  4.   
  5. public class image : MonoBehaviour  
  6. {  
  7.   
  8.     GameObject text;//获取notice提示文本,存在这个变量里面进行操作  
  9.     public static Vector3 vec3, pos;//用于存放坐标,其变量类型也是Vector3,从官方文档抄来的,我也不知道为什么  
  10.   
  11.     //初始化函数  
  12.     void Start()  
  13.     {  
  14.         text = GameObject.Find("notice");//获取提示文本  
  15.         text.SetActive(false);//让提示文本隐藏  
  16.         gameObject.SetActive(false);//让自己隐藏,也就是这个image  
  17.     }  
  18.   
  19.     // Update is called once per frame  
  20.     void Update()  
  21.     {  
  22.   
  23.     }  
  24.   
  25.     //按下鼠标将会被触发的事件  
  26.     public void PointerDown()  
  27.     {  
  28.         vec3 = Input.mousePosition;//获取当前鼠标位置  
  29.         pos = transform.GetComponent<RectTransform>().position;//获取自己所在的位置  
  30.     }  
  31.   
  32.     //鼠标拖拽时候会被触发的事件  
  33.     public void Drag()  
  34.     {  
  35.         Vector3 off = Input.mousePosition - vec3;  
  36.         //此处Input.mousePosition指鼠标拖拽结束的新位置  
  37.         //减去刚才在按下时的位置,刚好就是鼠标拖拽的偏移量  
  38.         vec3 = Input.mousePosition;//刷新下鼠标拖拽结束的新位置,用于下次拖拽的计算  
  39.         pos = pos + off;//原来image所在的位置自然是要被偏移的  
  40.         transform.GetComponent<RectTransform>().position = pos;//直接将自己刷新到新坐标  
  41.     }  
  42.   
  43.     //此函数接口将赋予给“弹出对话框”按钮的onClick事件  
  44.     public void onShow()  
  45.     {  
  46.         gameObject.SetActive(true);//显示自己  
  47.     }  
  48.   
  49.     //此函数接口将赋予给“确认”按钮的onClick事件  
  50.     public void onOK()  
  51.     {  
  52.         text.SetActive(true);//让提示文本显示  
  53.         GameObject.Find("notice").GetComponent<Text>().text = "你点击了确定!";//并更改内容  
  54.         gameObject.SetActive(false);//让自己隐藏  
  55.     }  
  56.   
  57.     //此函数接口将赋予给“取消”按钮的onClick事件  
  58.     public void onCancel()  
  59.     {  
  60.         text.SetActive(true);//让提示文本显示  
  61.         GameObject.Find("notice").GetComponent<Text>().text = "你点击了取消!";//并更改内容  
  62.         gameObject.SetActive(false);//让自己隐藏  
  63.     }  
  64. }  
之后,我们将对这个image设置一个鼠标按下事件和鼠标拖拽事件,如下图所示。


之后和《【Unity3D】场景切换、UGUI组件事件、开始游戏与关闭游戏》(点击打开链接)一样,在Pointer Down事件中指明函数是image中的PointerDown,Drag就是image.Drag,如下图所示:


最后,对于其余各个Button指明相应的onClick事件,保存场景,发布,完成!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值