在Unity脚本 修改器手册中GUILayout.Button怎么设置位置

【Unity】6.2 在VS2015中调试 C# 脚本_Unity3D教程_中国AR网
&当前位置: &
一、简介这一节先利用GUI显示一个简单的界面(以后还会专门介绍GUI),并解释如何在VS2015中调试C#脚本。本节例子的运行效果如下:二、调试C#脚本的方式有以下方式:(1)利用断点调试。断点设置和取消的办法与在控制台应用程序中利用断点调试C#代码的办法相同。(2)通过Debug类提供的方法在后台输出调试信息。该办法会直接在VS2015输出窗口以及Unity的控制台(Console)中输出调试信息。(3)在Unity的播放预览模式下,直接修改检视器(Inspector)中显示的变量的值,观察不同值的效果。三、本节例子的设计步骤1、运行Unity,新建ch06Demo工程。2、在Project视图的Assets下添加一个名字为“6.2”的子文件夹,然后将默认的场景保存到该文件夹下,场景名称为“Scene2.unity”。3、在Assets/6.2文件夹下鼠标右击添加一个文件名为ch06_2_1.cs的C#脚本,然后双击它在VS2015中打开该脚本,将其改为下面的内容:using&UnityEusing&System.Cpublicclass&ch06_2_1&:&MonoBehaviour
{&&&&publicint&age&=&20;&&&&privatestring&text&=&&&;&&&&privatestring&myName&=&&&;&&&&void&OnGUI()
&&&&{&&&&&&&&//用标签显示文本
&&&&&&&&GUILayout.Label(string.Format(&你的年龄是:{0}\n&,&age));
&&&&&&&&GUILayout.Label(&请输入你的名字:&);&&&&&&&&//在文本区域中输入名字
&&&&&&&&text&=&GUILayout.TextField(text);&&&&&&&&//按钮if&(GUILayout.Button(&提交&))
&&&&&&&&&&&&myName&=&
&&&&&&&&}&&&&&&&&//当myName不为空的时候,说明我们已经提交了名字,则显示名字if&(!string.IsNullOrEmpty(myName))
&&&&&&&&&&&&GUILayout.Label(&提交成功,名字:&&+&myName);
}4、按&Ctrl&+S保存该脚本。5、切换到Unity,观察Project下的文件夹,会发现6.2文件夹下有2个文件:5、在层次视图中鼠标右击,添加一个空的GameObject:6、选中GameObject,以便在检视器中观察它。然后将ch06_2_1.cs拖放到检视器中得到下面的结果:这时你就会发现,脚本中声明为public的age变量,在GameObject的检视器视图中被自动封装成了Age属性,并显示在脚本的下面。说明:这就是为什么我们在C#脚本中用小写字母开头的age来声明这个变量,因为Unity会将自动其封装为用大写字母开头的同名属性。6、按【播放】按钮进入预览模式,即可看到运行效果:7、在文本框中输入名字,单击【提交】按钮,就会在界面中的下一行显示出名字信息。8、拖放检视器中【Age】属性的值(按住鼠标左右拖放),你就会发现该值在场景中也会跟着变化:9、再次按【播放】按钮结束预览模式。10、切换到VS2015,再要插入代码处鼠标右击,选择【Implement MonoBehabious】,在弹出的窗口中,勾选Start(),如下图所示:单击【OK】,它就会自动在当前光标处添加Start()方法。11、将Start()改为下面的代码:publicvoid&Start()
&&&&&&&&Debug.Log(&Age:&+age);&&&&&&&&//还可以输出下面的分类信息
&&&&&&&&&Debug.Log(&普通信息&);
&&&&&&&&Debug.LogWarning(&警告信息&);
&&&&&&&&Debug.LogError(&错误信息&);
&&&&}12、选择【Attach to Unity and Play】:然后单击它,此时,它就会自动从VS2015切换到Unity,并在Unity的Console选项卡中输出下面的内容:当然了,这样做只是为了演示如何在VS2015中直接启动Unity下的播放预览模式,并在Unity的Console中输出不同级别的信息(一般、警告、错误)。在实际的代码中肯定不会这样做,而是应该根据具体情况,决定在后台输出哪一类的调试信息。13、单击Unity的【播放】按钮结束预览模式。14、切换到VS2015,结束运行,然后注释掉Start()方法中的语句,单击【保存】或者【全部保存】:好了,通过这个例子,你应该知道如何在VS2015中调试C#脚本了吧。另外,你也可以直接在VS2015的解决方案资源管理器中项目的对应文件夹下添加新的C#脚本或者其他资源,或者创建新的子文件夹(VS2015中项目文件夹的结构和Unity工程中Project下文件夹的结构完全相同),保存后它都会自动将其同步到Unity的Assets下的对应文件夹中,这个“同步”过程完全是自动的,你所做的就是“创建”、“编辑”、“保存”。
中国AR网()为更好的服务国内AR技术爱好者 ,现已推出“AR那些事”官方公众号,请在微信公众账号中搜索「armeiti」或者加QQ群:,即可获得每日内容推送和最新的AR开发教程及AR H游戏资源哦!
上一篇: 下一篇:
有话您说 访客日访客日访客日访客日访客日我在上一篇&一点儿不会&的系列随笔中说大概一周会发个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(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的绑定。是不是很爽?
然后,点击上边的运行按钮。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(200), GUILayout.Height(50)))
Debug.Log("GUILayout搞出来的Button三被点击了!");
if (GUILayout.Button("GUILayout搞出来的Button四", GUILayout.Width(200), GUILayout.Height(50)))
Debug.Log("GUILayout搞出来的Button四被点击了!");
运行,看图:
我们在代码中不再需要设置Button的位置了,GUILayout.Button帮我们自动排列了。如果想让两个控件增加距离也很简单,使用GUILayout.Space()方法即可,该方法的参数为int,指像素的个数。
总结和废话
以上就是今天学习的Button。
总觉得自己用不小的篇幅介绍如此简单的控件有些装逼。其实主要是介绍了脚本的创建和如何编辑,下一篇我估计会介绍尽量多的GUI控件和我的一些心得体会。
学得比较慢,我是想踏实下来,不再浮躁地急于求成。
最近状态特别不好,对自己产生了怀疑。包括能力、梦想,还有对现实的态度。
老大不小了,依旧迷茫不堪。
想明白活着的意义,特别想。
阅读(...) 评论()您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
unity3d中文脚本使用手册.pdf462页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:200 &&
unity3d中文脚本使用手册
你可能关注的文档:
··········
··········
脚本概览 这是一个关于Unity 内部脚本如何工作的简单概览。 Unity 内部的脚本,是通过附加自定义脚本对象到游戏物体组成的。在脚本对象内部不
同志的函数被特定的事件调用。最常用的列在下面: Update: 这个函数在渲染一帧之前被调用,这里是大部分游戏行为代码被执行的地方,除了物
理代码。 FixedUpdate: 这个函数在每个物理时间步被调用一次,这是处理基于物理游戏的地方。 在任何函数之外的代码: 在任何函数之外的代码在物体被加载的时候运行,这个可以用来初始化脚本状态。 注意:文档的这个部份假设你是用 Javascript ,参考用 C#编写获取如何使用 C#和 Boo
编写脚本的信息。 你也能定义事件句柄,它们的名称都以On 开始,(例如OnCollisionEnter ),为了查看完
整的预定义事件的列表,参考MonoBehaviour?文档。 概览:常用操作 大多数游戏物体的操作是通过游戏物体的Transform 或Rigidbody 来做的,在行为脚本
内部它们可以分别通过transform 和rigidbody 访问,因此如果你想绕着Y 轴每帧旋转5 度,
你可以如下写: function?Update
() transform.Rotate 0,5,0 ; 如果你想向前移动一个物体,你应该如下写: function?Update
() transform.Translate 0,0,2 ; 概览:跟踪时间 Time 类包含了一个非常重要的类变量,称为 deltaTime,这个变量包含从上一次调用
Update 或 FixedUpdate
(根据你是在Update 函数还是在FixedUpdate 函数中)到现在的时
间量。 所以对于上面的例子,修改它使这个物体以一个恒定的速度旋转而不依赖于帧率: function?Update
() transform.Rotate 0,5*Time.deltaTime,0 ; 移动物体: function?Update
() transform.?Translate? 0,?,0,2*Time.deltaT 如果你加或是减一个每帧改变的值,你应该将它与 Time.deltaTime 相乘
正在加载中,请稍后...中国领先的IT技术网站
51CTO旗下网站
Unity3D教程:GUI的布局模式
有两种方法让你去布置和组织你的GUI,一个是固定的,一个是活动的,所有GUI打头的例子都是固定的,要想使用活动的Layout,就得用GUILayout代替GUI.它同样也是写在OnGUI()函数里。
作者:U3d来源:Unity3D教程手册| 08:52
固定Layout是用在你预先设计好界面的时候,活动Layout工作在你不知道会有多少组件或者如何定位他们的时候,这里有个例子:
function&OnGUI&()&{&&&&GUI.Button&(Rect&(25,25,100,30),&&I&am&a&Fixed&Layout&Btton&);&&&&GUILayout.Button&(&I&am&an&Automatic&Layout&Button&);&&}&
在活动Layout模式里,你可以控制组件的位置,并组织他们。在固定模式下你可以把多个控件放进Groups中,在活动模式下可以把他们放在Areas, Horizontal Groups和Vertical Groups里。
固定Layout中的Groups
Groups 在固定Layout模式中起到组织可用项的,他让你在屏幕的一个区域中包含多个控件。你要把定义的控件放在GUI.BeginGroup()和 GUI.EndGroup()这对函数中间,所有控件的位置坐标都以Groups的0坐标为起点,假如你更改了group坐标,那么内部的控件也会跟随改变。
&&function&OnGUI(){&&GUI.BeginGroup&(Rect&(Screen.width&/&2&,&Screen.height&/&2&&&50,&100,&100));&&GUI.Box&(Rect&(0,0,100,100),&&Group&is&here&);&&GUI.Button&(Rect&(10,40,80,30),&&Click&me&);&&GUI.EndGroup&();&&}&
Group也可以嵌套,例如:
var&bgImage&:&Texture2D;&&&var&fgImage&:&Texture2D;&&&var&playerEnergy&=&1.0;&&&function&OnGUI&()&{&&&&&&GUI.BeginGroup&(Rect&(0,0,256,32));&&&&GUI.Box&(Rect&(0,0,256,32),&bgImage);&&&&&&GUI.BeginGroup&(Rect&(0,0,playerEnergy&*&256,&32));&&&&GUI.Box&(Rect&(0,0,256,32),&fgImage);&&&&GUI.EndGroup&();&&GUI.EndGroup&();&&}&
和我们熟知的if-else语句一样,相互最接近的begin和end为一组。
活动Layout-Areas
Areas只用于活动Layout模式.作用和固定模式下的Group一样。
在活动模式下,你可以定义Area的范围,也可以不定义。不定义的时候整个屏幕就是它的范围,如果手工定义了它的范围,那么它内部的控件将以Area的坐标为起始坐标。Unity3D教程手册
function&OnGUI&()&{&&GUILayout.Button&(&I&am&not&inside&an&Area&);&&GUILayout.BeginArea&(Rect&(Screen.width/2,&Screen.height/2,&300,&300));&&GUILayout.Button&(&I&am&completely&inside&an&Area&);&&GUILayout.EndArea&();&&}&
自动Layout - Horizontal and Vertical Groups
自动模式中还有还有两对组函数:GUILayout.BeginHoriztontal(),GUILayout.EndHorizontal(),GUILayout.BeginVertical(),和GUILayout.EndVertical().他们用在Area中,同样也是成对使用的。
其特点是Horiztontal中的控件呈水平排列,Vertical中的控件呈垂直排列。
var&sliderValue&=&1.0;&&var&maxSliderValue&=&10.0;&&function&OnGUI()&&{&&&&GUILayout.BeginArea&(Rect&(20,0,200,60));&&&&GUILayout.BeginHorizontal();&&&&if&(GUILayout.RepeatButton&(&Increase&max\nSlider&Value&))&&{&&maxSliderValue&+=&3.0&*&Time.deltaT&&}&&&&&&GUILayout.BeginVertical();&&GUILayout.Box(&Slider&Value:&&&+&Mathf.Round(sliderValue));&&sliderValue&=&GUILayout.HorizontalSlider&(sliderValue,&0.0,&maxSliderValue);&&&&GUILayout.EndVertical();&&GUILayout.EndHorizontal();&&GUILayout.EndArea();&&}&
用GUILayoutOptions去定义一些控件 比如可以控制按钮的长度,如:
function&OnGUI&()&{&&GUILayout.BeginArea&(Rect&(100,&50,&Screen.width&200,&Screen.height&100));&&GUILayout.Button&(&I&am&a&regular&Automatic&Layout&Button&);&&GUILayout.Button&(&My&width&has&been&overridden&,&GUILayout.Width&(95));&&GUILayout.EndArea&();&&}&
这里GUILayout.Width (95)就定义了按钮的长度为95。
原文链接:
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
原创外电外电头条专题
24H热文一周话题本月最赞
讲师:1人学习过
讲师:35人学习过
讲师:0人学习过
精选博文论坛热帖下载排行
本书重点介绍了主流ARM应用系统的开发与实践。全书基于目前较为通用、流行的ARM处理器,介绍了其原理、硬件结构、硬件电路设计与开发和软件...
订阅51CTO邮刊

我要回帖

更多关于 脚本 修改器 的文章

 

随机推荐