从一点儿不会开始——Unity3D游戏开发学习(二) ——GUI控件之Button

一些废话

我在上一篇“一点儿不会”的系列随笔中说大概一周会发个2~3篇关于Unity的学习笔记。可这就两周过去了,我还停留在一篇的进度上,主要是这两周发生了一些事情致使我更新缓慢。其实截至目前为止,上一篇的随便的阅读数量只有可怜的29次,我估计至少有9次是我用不一样设备、不一样IP访问的结果。程序员

哈哈,不过原本这随笔的目的也就是个随笔,那就无所谓阅读量啦。学习

另外我这人嘴上没啥把门儿的,之前想到啥说啥,如今好点儿了,但仍是偶尔会有脏话,没辙,这是秉性,改不了了,因此若是之后的文章里出现了脏话啥的,绝对没有针对谁的意思。彻底能够理解是我傻逼就好了。编码

ok,继续了。此次学习GUI控件中的Button。spa

 

建立脚本

上一篇已经介绍了各个视图的做用和他们所存放的东西。此次主要用到Hierarchy视图中Main Camera以及在Project试图中建立脚本。对,脚本,它就叫脚本,由于它绑定在游戏对象上。其实他娘的最为一个写程序的屌丝,我挺不喜欢“脚本”这个词儿的。咱们今天就是要建立个脚本并绑定在Main Camera上,来把Button搞出来。3d

进来咱们的IDE,你会发如今Hierarchy视图中Main Camera已经默认被建立好了,对吧。调试

image

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

image

 

将该脚本重命名为Test_Button。而后就建立了个C#脚本。对象

image

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

image

 

代码中绘制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(0, 0, 100, 50), "第一个Button"))
        {
            Debug.Log("第一个Button被点击了!");
        }

        if (GUI.Button(new Rect(20, 20, 100, 50), "第二个Button"))
        {
            Debug.Log("第二个Button被点击了!");
        }
    }

而后,回到Unity界面。点击Test_Button,你会在Inspector看到,Unity里的脚本已经显示出来修改过的内容了。

再而后,关键的一步也是很是简单的一步到了,直接把Test_Button拖到Hierarchy视图中的Main Camera上,就完成了脚本到Game Object的绑定。是否是很爽?

image

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

image

image

简单吧?但你有没有发现一个问题?两个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(200), GUILayout.Height(50)))
        {
            Debug.Log("GUILayout搞出来的Button三被点击了!");
        }

        if (GUILayout.Button("GUILayout搞出来的Button四", GUILayout.Width(200), GUILayout.Height(50)))
        {
            Debug.Log("GUILayout搞出来的Button四被点击了!");
        }
    }

运行,看图:

image

咱们在代码中再也不须要设置Button的位置了,GUILayout.Button帮咱们自动排列了。若是想让两个控件增长距离也很简单,使用GUILayout.Space()方法便可,该方法的参数为int,指像素的个数。

 

本篇对应的Unity 工程,请下载。

总结和废话

OK。

以上就是今天学习的Button。

总以为本身用不小的篇幅介绍如此简单的控件有些装逼。其实主要是介绍了脚本的建立和如何编辑,下一篇我估计会介绍尽可能多的GUI控件和个人一些心得体会。

学得比较慢,我是想踏实下来,再也不浮躁地急于求成。

 

最近状态特别很差,对本身产生了怀疑。包括能力、梦想,还有对现实的态度。

老大不小了,依旧迷茫不堪。

想明白活着的意义,特别想。

相关文章
相关标签/搜索