从一点儿不会开始——Unity3D游戏开发学习(二) ——GUI控件之Button
一些废话
我在上一篇“一点儿不会”的系列随笔中说大概一周会发个2~3篇关于Unity的学习笔记。可这就两周过去了,我还停留在一篇的进度上,主要是这两周发生了一些事情导致我更新缓慢。其实截至目前为止,上一篇的随便的阅读数量只有可怜的29次,我估计至少有9次是我用不同设备、不同IP访问的结果。
哈哈,不过本来这随笔的目的也就是个随笔,那就无所谓阅读量啦。
另外我这人嘴上没啥把门儿的,以前想到啥说啥,现在好点儿了,但还是偶尔会有脏话,没辙,这是秉性,改不了了,所以如果以后的文章里出现了脏话啥的,绝对没有针对谁的意思。完全可以理解是我傻逼就行了。
ok,继续了。这次学习GUI控件中的Button。
创建脚本
上一篇已经介绍了各个视图的作用和他们所存放的东西。这次主要用到Hierarchy视图中Main Camera以及在Project试图中创建脚本。对,脚本,它就叫脚本,因为它绑定在游戏对象上。其实他娘的最为一个写程序的屌丝,我挺不喜欢“脚本”这个词儿的。我们今天就是要创建个脚本并绑定在Main Camera上,来把Button搞出来。
进来我们的IDE,你会发现在Hierarchy视图中Main Camera已经默认被创建好了,对吧。

然后就要创建脚本,在Project视图上边儿的Create然后选择第三个项,C# Script。对,C#,我深爱的C#。

将该脚本重命名为Test_Button。然后就创建了个C#脚本。

想编辑?双击它。如果你安装Unity 的时候使用的是默认设置,这个时候就会自动打开MonoDevelop IDE来让你编辑这个C#脚本,并且为你生产了.csproj和.sln等文件。我擦我一直是用VS写C#的好么?于是乎,直接双击生成的.sln,进入了熟悉的VS喽,然后就开始C#的编码了。用VS没法儿直接调试,要调试的话还得用MonoDevelop,这个是后话了。我是喜欢用VS写代码,到需要调试的时候直接用Mono就行了。

代码中绘制Button
创建的脚本文件中,Unity默认为我们提供了两个方法。Start() 和 Update()。
这里说一下Start()是脚本加载的时候执行的,只执行一次,一般用来初始化一些私有成员的时候用;Update方法是更新的,游戏运行每一帧都执行一次,它的作用非常大。
而我们在创建今天要学习的Button,需要在OnGUI方法中,这个方法没有被默认创建,需要我们自己写。OnGUI用来绘制控件的,很类似我们以前做桌面程序的OnPaint事件。
接下来就是绘制Button的代码,在OnGUI方法中,使用GUI.Button()方法创建,第一个参数是Rect类型的,用来设置Button 的位置;第二个参数为内容,可以是string类型的,也可以是Texture类型的,也就是图片。该方法的返回类型为Bool类型的,点击了就返回True,否则是False。
如下:
void OnGUI()
{
if (GUI.Button(new Rect(, , , ), "第一个Button"))
{
Debug.Log("第一个Button被点击了!");
} if (GUI.Button(new Rect(, , , ), "第二个Button"))
{
Debug.Log("第二个Button被点击了!");
}
}
然后,回到Unity界面。点击Test_Button,你会在Inspector看到,Unity里的脚本已经显示出来修改过的内容了。
再然后,关键的一步也是非常简单的一步到了,直接把Test_Button拖到Hierarchy视图中的Main Camera上,就完成了脚本到Game Object的绑定。是不是很爽?

然后,点击上边的运行按钮。ok,出来了。点击两个Button下边的Log就会显示出来,与代码中写的一致吧?点击下边的Log,Console视图窗口会弹出来,更方便我们查看输出Log信息。


简单吧?但你有没有发现一个问题?两个Button重叠了啊我操!相信你刚开始就看到了,为什么重叠了?
没错儿,两个GUI.Button()的第一个参数,Rect的位置设置的问题。太近了,挪远点儿就好了。但是,你有没有发现,这个Rect的位置是绝对的!如果部署在不同分辨率上,有可能会造成越界、显示不全的问题啊!我操,蛋疼的多分辨率啊,做设备应用程序员永远的痛啊!!!于是,我们可以这样搞————————
GUILayout.Button()
使用GUILayout.Button()可以解决刚才那个覆盖的问题,Unity很贴心。上代码:
void OnGUI()
{
//if (GUI.Button(new Rect(0, 0, 100, 50), "第一个Button"))
//{
// Debug.Log("第一个Button被点击了!");
//} //if (GUI.Button(new Rect(20, 20, 100, 50), "第二个Button"))
//{
// Debug.Log("第二个Button被点击了!");
//} if (GUILayout.Button("GUILayout搞出来的Button三", GUILayout.Width(), GUILayout.Height()))
{
Debug.Log("GUILayout搞出来的Button三被点击了!");
} if (GUILayout.Button("GUILayout搞出来的Button四", GUILayout.Width(), GUILayout.Height()))
{
Debug.Log("GUILayout搞出来的Button四被点击了!");
}
}
运行,看图:

我们在代码中不再需要设置Button的位置了,GUILayout.Button帮我们自动排列了。如果想让两个控件增加距离也很简单,使用GUILayout.Space()方法即可,该方法的参数为int,指像素的个数。
总结和废话
OK。
以上就是今天学习的Button。
总觉得自己用不小的篇幅介绍如此简单的控件有些装逼。其实主要是介绍了脚本的创建和如何编辑,下一篇我估计会介绍尽量多的GUI控件和我的一些心得体会。
学得比较慢,我是想踏实下来,不再浮躁地急于求成。
最近状态特别不好,对自己产生了怀疑。包括能力、梦想,还有对现实的态度。
老大不小了,依旧迷茫不堪。
想明白活着的意义,特别想。
从一点儿不会开始——Unity3D游戏开发学习(二) ——GUI控件之Button的更多相关文章
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...
- 【读书笔记《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)
3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里 ...
- C#开发学习——web服务器端控件
Asp.net在客户端开发和web开发所用到的控件还是有很大的差别的,而且Web开发的界面是在浏览器中显示的,所以控件的设计都和前边学习HTML设计有联系,没有客户端开发那么简单,不过我们可以 ...
- unity3d游戏开发学习之使用3dmax创建导弹模型
在着手研究Unity3D的游戏开发时,3D模型能够考虑从unity的assets store去获取,也能够从网上搜索下载,同一时候咱们也能够尝试下自己动手去做一些简单的模型. 这里就依据unity3d ...
- 【读书笔记《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)
3.9 TabSpec与TabHost TabHost类官方文档地址:http://developer.android.com/reference/android/widget/TabHost.htm ...
- 【Unity】1.3 Unity3D游戏开发学习路线
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.基本思路 第1步--了解编辑器 首先了解unity3d的菜单,视图界面.这些是最基本的基础,可以像学word操作一样,大致能明 ...
- unity3d游戏开发学习分享之表面着色器讲解
一.三种着色器的书写格式: 1.surface shaders, 指的是表面着色器 2.vertex and fragment shaders and 指的是顶点和片段着色器 3.fixed func ...
- 【读书笔记《Android游戏编程之从零开始》】7.Android 游戏开发常用的系统控件(Dialog)
在Android应用开发中,Dialog(对话框)创建简单且易于管理因而经常用到,对话框默认样式类似创建样式的Activity.首先介绍android.app.AlertDialog下的Builder ...
- 【读书笔记《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)
3.7 ProgressBar ProgressBar类官方文档地址:http://developer.android.com/reference/android/widget/ProgressBar ...
随机推荐
- PHP 登录完成后如何跳转上一访问页面
访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面 项目需求 访问网站页面时,有的页面需要授权才能访问,这时候就会要 ...
- WinFrom下连接字符串的数据库文件路径问题
一直以为连接字符串中的系统变量|DataDirectory|就是在ASP.NET中代替App_Data的绝对路径.原来在WinForm程序中也能用|DataDirectory|,不过指代的是exe文件 ...
- Git客户端TortoiseGit(Windows系统)的使用方法
本文环境: 操作系统:Windows XP SP3 Git客户端:TortoiseGit-1.8.8.0-32bit 一.安装Git客户端 全部安装均采用默认! 1. 安装支撑软件 msysgit: ...
- (转)android底部弹出iOS7风格对话选项框(QQ对话框)--第三方开源--IOS_Dialog_Library
本文转载于:http://blog.csdn.net/zhangphil/article/details/44940339 完成这个效果的是使用了 IOS_Dialog_Library 下载地址:ht ...
- 笔记 php.ini配置文件中magic_quotes_gpc, magic_quotes_runtime的作用是什么?应该开启还是关闭?
默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET.POST 和 COOKIE 数据自动运行 addslashes().不要对已经被 magic_quotes_gp ...
- EventHandler委托的使用
今天复习了一下事件和委托,本来看事件来着,看到EventHandler,写了一个小例子,想贴在这里解释一下.为了弄清楚EventHandler, 还是回归到最基本的委托,曾经在园子里看到一位前辈用深入 ...
- Fedora9下解决无ifconfig指令
问题:在VM6.5上装了Fedora9,但是当输入ifconfig指令的时候,提示不存在. 原因:PATH环境变量设置不对,少了几个目录:/sbin:/usr/sbin:/usr/local/sbin ...
- HDFS命令行操作
启动后可通过命令行使用hadoop. (1)所有命令 (先将$HADOOP_HOME/bin加入到.bashrc的$PATH变量中) [html] view plaincopy [hadoop@nod ...
- MySQL创建复合索引
在MySQL数据库中,创建复合索引的时候,不知道在创建过程中哪个列在前面,哪个列该在后面,用以下方式即可: select count(distinct first_name)/count(*) as ...
- (菜鸟要飞系列)四,基于Asp.Net MVC5的后台管理系统(zTree绑定Json数据生成树)
上一次老师让我们用递归将中国城市镇县四级联动 显示在树上,那个时候就知道可以显示在zTree上,可是苦于对Json的不了解,对zTree的Api的不了解,一直没有做出来,只好将递归算法显示在了窗体上, ...