Unity3D入门

Unity3D是一款应用广泛的3D游戏引擎,本文主要介绍unity3D的简单应用,安装过程略过。

在游戏的整个开发过程中,游戏界面设计占据非常重要的地位。因为游戏启动后,第一个映入眼帘的就是整个游戏UI界面。UI界面主要包括贴图、按钮和高级控件等。
Unity为开发者提供了一套非常完善的图形化界面引擎,它包括常见的游戏窗口,文本框,输入框,拖动条,按钮,贴图框等,无论是做软件还是做游戏,都可以很方便地使用

GUI高级控件

Label控件,Button控件,TextField控件,ToolBar空间,Slider控件,ScrollView控件等

一些特殊的方法

Start()方法:该方法只执行一次,一般放一些初始化相关的代码。本例中:
function Start()
{//得到屏幕宽高screenWidth = Screen.width;screenHeight = Screen.height;//得到图片宽高imageWidth = imageTexture.width;imageHeight = imageTexture.height;
}OnGUI()方法,它是界面绘制方法,所有GUI的绘制都需要在这个方法中实现。本例中,
function OnGUI () 
{//将文字内容显示在屏幕中GUI.Label(Rect(100, 10, 100, 30), str);GUI.Label(Rect(100, 40, 100, 30), "当前屏幕宽:" + screenWidth);GUI.Label(Rect(100, 80, 100, 30), "当前屏幕高:" + screenHeight);//将贴图显示在屏幕中GUI.Label(Rect(100, 120, imageWidth, imageHeight),imageTexture);
}

对变量的声明

  只有公有变量才可以在编辑器中拖拽对象或者以输入的形式赋值。如本例中的“HelloWorld” 以及图片对象。在声明变量时,在变量前方添加public关键字或未添加任何关键字都可以表示该变量为公有变量。本例中,//接收外部赋值字符串
public var str :String;
//接收外部赋值贴图
var imageTexture : Texture;
//贴图宽度
private var imageWidth : int;
//贴图高度
private var imageHeight :int; 
//当前屏幕高度
private var screenWidth :int;
//当前屏幕宽度
private var screenHeight :int;

label控件

//接收外部赋值字符串
public var str :String;
//接收外部赋值贴图
var imageTexture : Texture;
//贴图宽度
private var imageWidth : int;
//贴图高度
private var imageHeight :int; 
//当前屏幕高度
private var screenWidth :int;
//当前屏幕宽度
private var screenHeight :int;function Start()
{//得到屏幕宽高screenWidth = Screen.width;screenHeight = Screen.height;//得到图片宽高imageWidth = imageTexture.width;imageHeight = imageTexture.height;
}function OnGUI () 
{//将文字内容显示在屏幕中GUI.Label(Rect(100, 10, 100, 30), str);GUI.Label(Rect(100, 40, 100, 30), "当前屏幕宽:" + screenWidth);GUI.Label(Rect(100, 80, 100, 30), "当前屏幕高:" + screenHeight);//将贴图显示在屏幕中GUI.Label(Rect(100, 120, imageWidth, imageHeight),imageTexture);
}

Button控件

//按钮贴图
var buttonTexture : Texture2D;//提示信息
private var str : String;//时间计数器
private var frameTime : int;function Start()
{//初始化赋值str = "请您点击按钮";
}function OnGUI() 
{//显示提示信息内容GUI.Label(Rect(10, 10, Screen.width, 30), str);if(GUI.Button(Rect(10,50,buttonTexture.width,buttonTexture.height),buttonTexture)){//点击按钮修改提示信息str = "您点击了图片按钮";}//设置按钮中文字的颜色GUI.color = Color.green;//设置按钮的背景色GUI.backgroundColor = Color.red;if (GUI.Button(Rect(10,300,70,30),"文字按钮")){//点击按钮修改提示信息str = "您点击了文字按钮";}//设置按钮中文字的颜色GUI.color = Color.yellow;//设置按钮的背景色GUI.backgroundColor = Color.black;if (GUI.RepeatButton(Rect(10,350,100,30),"按钮按下中")){//点击按钮修改提示信息str = "按钮按下中的时间:"+ frameTime;//时间计数器++frameTime++;}}

TextField控件

//用户名
private var editUsername : String;
//密码
private var editPassword : String;
//提示信息
private var editShow : String;function Start()
{editShow = "请您输入正确的用户名与密码";editUsername = "请输入用户名";editPassword = "请输入密码";
}function OnGUI () 
{//显示提示信息内容GUI.Label(Rect(10, 10, Screen.width, 30), editShow);if (GUI.Button(Rect(10,120,100,50),"登录")){//点击按钮修改提示信息editShow = "您输入的用户名为 :" + editUsername + " 您输入的密码为:"+ editPassword;}//编辑框提示信息GUI.Label(Rect(10, 40, 50, 30), "用户名");GUI.Label(Rect(10, 80, 50, 30), "密码:");//获取输入框输入的内容editUsername = GUI.TextField (Rect (60, 40, 200, 30), editUsername, 15);editPassword = GUI.PasswordField  (Rect (60, 80, 200, 30), editPassword, "*"[0],15);
}

ToolBar控件

//工具栏选择按钮的ID
private var select : int;//工具栏显示按钮的字符串
private var barResource : String[];//选择按钮是否被按下
private var selectToggle0: boolean;
private var selectToggle1: boolean;function Start()
{//初始化select = 0;barResource = ["第一个工具栏","第二个工具栏","第三个工具栏","第四个工具栏"];selectToggle0 = false;selectToggle1 = false;
}function OnGUI () 
{//备份上一次工具栏选择的IDvar oldSelect = select;//重新计算本次工具栏选择的IDselect = GUI.Toolbar(Rect (10, 10, barResource.length * 100, 30), select, barResource);//如果两次选择的是不同的工具栏,将选择按钮全部释放掉if(oldSelect != select){selectToggle0 = false;selectToggle1 = false;}//根据工具栏选择的ID 显示不同的信息switch(select){case 0:selectToggle0 = GUI.Toggle(Rect(10, 50, 200, 30), selectToggle0, "第一个工具栏单项选择——1");selectToggle1 = GUI.Toggle(Rect(10, 80, 200, 30), selectToggle1, "第一个工具栏单项选择——2");break;case 1:selectToggle0 = GUI.Toggle(Rect(10, 50, 200, 30), selectToggle0, "第二个工具栏单项选择——1");selectToggle1 = GUI.Toggle(Rect(10, 80, 200, 30), selectToggle1, "第二个工具栏单项选择——2");break;  case 2:selectToggle0 = GUI.Toggle(Rect(10, 50, 200, 30), selectToggle0, "第三个工具栏单项选择——1");selectToggle1 = GUI.Toggle(Rect(10, 80, 200, 30), selectToggle1, "第三个工具栏单项选择——2");break;case 3:selectToggle0 = GUI.Toggle(Rect(10, 50, 200, 30), selectToggle0, "第四个工具栏单项选择——1");selectToggle1 = GUI.Toggle(Rect(10, 80, 200, 30), selectToggle1, "第四个工具栏单项选择——2");break;      }   
}

slide控件

//纵向滑动条数值
var verticalValue : int = 0;//横向滑动条数值
var horizontalValue : float = 0.0f;function OnGUI () 
{//计算滑动进度verticalValue = GUI.VerticalSlider (Rect (25, 25, 30, 100), verticalValue, 100, 0);horizontalValue = GUI.HorizontalSlider(Rect (50, 25, 100, 30), horizontalValue, 0.0f, 100.0f);//将滑动进度显示在屏幕中GUI.Label(Rect(10, 150, Screen.width, 30), "纵向滑动条当前进度: " + verticalValue +"%");GUI.Label(Rect(10, 180, Screen.width, 30), "横向滑动条当前进度: " + horizontalValue +"%");
}

scrollView

//滚动条位置
var scrollPosition : Vector2;function Start()
{//初始化滚动条位置scrollPosition[0] = 50;scrollPosition[1] = 50;}function OnGUI () {//设置开始滚动视图scrollPosition = GUI.BeginScrollView (Rect (0,0,200,200),scrollPosition, Rect (0, 0, Screen.width, 300),true,true);GUI.Label(Rect(100, 40, Screen.width, 30), "测试滚动视图,测试滚动视图,测试滚动视图,测试滚动视图。");//设置结束滚动视图GUI.EndScrollView ();}

群组视图

群组视图(GroupView控件)可以将多个视图全部放在一个群组当中。将视图添加进群组当中后,群组中任何视图的坐标都是相对坐标,它是相对群组视图左上角的坐标。
修改群组视图的坐标都是相对坐标,群组中所有视图的坐标都会跟着修改。推荐使用群组视图来制作游戏界面,因为设备的屏幕尺寸不同,这样做可以避免堆坐标进行多次修改的麻烦。
GUIContent()方法:设置提示信息
GUI.tooltip:可以得到GUIContent中的提示字符串
GUI.BeginGroup():创建一个群组视图,必须以GUI.EndGroup()结束群组视图。
在该区域可以添加任意控件,如果超出该范围,则不予显示。

//贴图
var viewTexture0 : Texture2D;
var viewTexture1 : Texture2D;function OnGUI () 
{//开始这个群组GUI.BeginGroup(new Rect(300, 50, 200, 400));//显示贴图,坐标为相对群组的点(10,50)GUI.DrawTexture(Rect(10,0,viewTexture0.width,viewTexture0.height), viewTexture0);//标签提示信息GUI.Label(Rect(10,260,100,40),"群组视图1");//按钮GUI.Button(Rect(10,280,100,40),"按钮");//结束这个群组GUI.EndGroup();//开始这个群组GUI.BeginGroup(new Rect(600, 50, 500, 400));//显示贴图,坐标为相对群组的点(300,0)GUI.DrawTexture(Rect(10,20,viewTexture1.width,viewTexture1.height), viewTexture1);//标签提示信息GUI.Label(Rect(10,280,100,40), "群组视图2");//按钮GUI.Button(Rect(10,300,100,40),"按钮");//结束这个群组GUI.EndGroup();} 

窗口

在游戏中所有视图都需要依赖窗口来显示,我们可以把窗口理解成视图的父类。即游戏界面可以由若干个窗口组成,窗口又由若干个视图组成。
窗口中所有控件的坐标均采用相对坐标(相对于窗口左上角的坐标)。

//默认窗口位置
private var window0 : Rect = Rect (20, 20, 200, 200);
private var window1 : Rect = Rect (250, 20, 200, 200);
function OnGUI () 
{//在这里注册两个窗口GUI.Window (0, window0, oneWindow, "第一个窗口");GUI.Window (1, window1, twoWindow, "第二个窗口" );
}
//显示窗口1的内容
function oneWindow (windowID : int) {GUI.Box(Rect(10,50,150,50),"这里窗口的ID是" + windowID);if(GUI.Button(Rect(10,120,150,50),"普通按钮")){Debug.Log("窗口id = "+windowID+"按钮被点击");}}
//显示窗口2的内容
function twoWindow (windowID : int) {GUI.Box(Rect(10,50,150,50),"这里窗口的ID是" + windowID);if(GUI.Button(Rect(10,120,150,50),"普通按钮")){Debug.Log("窗口id = "+windowID+"按钮被点击");}
}

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不够优秀就不要腆着脸继续占便宜——作者:杨毅

原文地址:http://qing.weibo.com/tj/757d5835330007vx.html 发表于:2011年12月12日 21:34 转发 21正视自己,承认能力有限,精益求精,把自己打造成优秀的人,实现和另外同样优秀的人“公平交换”,…

3D打印产业化机遇与挑战

来源:3D科学谷3D打印的突出特点有两个:免除模具以及制造成本对设计的复杂性不敏感。免除模具的特点使得3D打印适合用于产品原型、试制零件、备品备件、个性化定制、零件修复、医疗植入物、医疗导板、牙科产品、耳机产品等小批量个性化的产品。而传统制造…

分享.NET开发中经常用到的十大软件(转)

以下排名不分先后: 1. EditPlus:文字处理软件 EditPlus 是一款功能强大的文字处理软件。它可以充分的替换记事本,它也提供网页作家及程序设计师许多强悍的功能。支持 HTML、CSS、PHP、ASP、Perl、C/C、Java、JavaScript、VBScript 等多…

Android之ExpandableListView

ExpandableListView可以用来表现多层级的listView&#xff0c;本文主要是ExpandableListView的一个简单实现 布局文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andro…

Api -- 连接世界的Super Star

文章目录&#x1f34f; 一、api 的定义&#xff1a;数据共享模式定义 4 大种类&#x1f356; 二、api 使用场景&#xff1a;互联网时代&#xff0c;api 无处不在2.1 sql 查询2.2 数据传输&#x1f364; 三、开放 api&#xff08;OpenAPI&#xff09;&#xff1a;开放双赢&#…

2018全球最强物联网公司揭晓!

来源&#xff1a;数字化企业根据Gartner预测&#xff0c; 到2020年将有超过200亿台联网设备&#xff0c;市场价值将达3000亿美元之巨。随着垂直应用上的不断细分&#xff0c;以及与AI的加速整合&#xff0c;物联网不仅将持续地变革人们的生活和工作&#xff0c;市场规模也将持续…

amr文件格式分析【转http://blog.csdn.net/dinggo/article/details/1966444】

目录1. 概述2. AMR编码方式3. AMR文件结构示范图4. AMR帧头格式分析5. 异常帧分析6. AMR帧读取算法7. 参考资料1. 概述 现在很多智能手机都支持多媒体功能&#xff0c;特别是音频和视频播放功能&#xff0c;而AMR文件格式是手机端普遍支持的音频文件…

Android之解析GML并显示

本例主要实现在APP中解析GML数据并显示 GML,地理标记语言&#xff08;外语全称&#xff1a;Geography MarkupLanguage、外语缩写&#xff1a;GML&#xff09;&#xff0c;它由开放式地理信息系统协会&#xff08;外语缩写&#xff1a;OGC&#xff09;于1999年提出&#xff0c;…

中国电子学会发布《新一代人工智能领域十大最具成长性技术展望(2018-2019年)》...

来源&#xff1a;中国电子学会当前&#xff0c;全球正在经历科技和产业高度耦合、深度迭加的新一轮变革&#xff0c;大数据的形成、理论算法的革新、计算能力的提升及网络设施的演进驱动人工智能进入新一轮创新发展高峰期&#xff0c;新技术持续获得突破性进展&#xff0c;呈现…

晓得不,中间表是这样被消灭的

目录 一、中间表的产生 1、一步算不出来 2、实时计算等待时间过长 3、多样性数据源参加计算 4、中间表难以删除 二、文件计算 三、高性能文件格式 四、易管理性 五、多数据源支持 六、集成性 七、资料 一、中间表的产生 中间表是数据库中专门存放中间计算结果的数据…

美国五大科技巨头的人工智能竞赛

来源&#xff1a;资本实验室毫无疑问&#xff0c;人工智能已经开始渗透到各行各业&#xff0c;并正在改变我们的工作方式和生活方式。2017年&#xff0c;全球与人工智能相关的资金投入总额达到152亿美元&#xff0c;比上一年增加144&#xff05;。而无论在投资&#xff0c;还是…

模拟Struts2实现

本文主要是一个模拟的Struts2的简单实现 真正的MVC架构 实现主要思路 定义一个过滤器&#xff0c;接收传递过去的Action&#xff0c;根据处理的结果重定向或者转发。 首先定义index.jsp <% page language"java" import"java.util.*" pageEncoding&q…

实战教学--怎样提高报表呈现的性能?

报表的性能很重要&#xff0c;是一个总被谈及的问题&#xff0c;跑的慢的报表用户体验恶劣&#xff0c;无法忍受。解决这些慢的性能问题&#xff0c;也成了项目方和工程师头疼的事情。一出状况&#xff0c;就得安排技术好的&#xff0c;能力强的工程师去救火&#xff0c;本来利…

WiFi共享精灵 - 不需路由器一键轻松把网线共享给手机、笔记本等同时无线上网...

现在人们身边手机、游戏机等各种使用WiFi上网的设备已经越来越多&#xff0c;但经常遇到一些地方只有有线网络&#xff0c;或者没有无线路由器的情况&#xff0c;这时&#xff0c;用笔记本上网&#xff0c;然后把网络通过WiFi共享给其他设备上网那么就最合适了。我们之前有介绍…

干货|李开复最新刷屏演讲:人工智能最难取代这13种工作,也最容易威胁人性与爱!...

来源&#xff1a;澎湃新闻这两年&#xff0c;创新工场董事长兼首席执行官李开复&#xff0c;一直为人工智能站台和奔走&#xff0c;还出新书帮助人们规划未来的AI生活。他预言&#xff0c;中国有望在全球范围内首先实现OMO&#xff08;Online-Merge-Offline&#xff0c;线上线下…

SQL 为什么动不动就 N 百行以 K 计

发明 SQL 的初衷之一显然是为了降低人们实施数据查询计算的难度。 SQL 中用了不少类英语的词汇和语法&#xff0c;这是希望非技术人员也能掌握。确实&#xff0c;简单的 SQL 可以当作英语阅读&#xff0c;即使没有程序设计经验的人也能运用。 然而&#xff0c;面对稍稍复杂的查…

Struts2入门

搭建Struts2的开发环境 找到所需的jar包&#xff1a;发行包的lib目录中&#xff08;不同版本需要的最小jar包是不同的&#xff0c;参见不同版本的文档。本文使用的是2.1.7&#xff09; struts2-core.jar 核心jar包xwork-2.jar xwork核心jar包ognl.jar ognl表达式freemarker…

Apifox vs Eolink,国内 Api 工具哪家强?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系&#xff0c;我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试&#xff0c;但是无法解决接口链路上的所有问题&#xff0c;一个工具难以支持整个过程。 在国内&#xff0c;我们可以看到有国产 API 管理工具&…

人工智能、区块链、混合现实:2019年新闻、媒体与技术趋势

来源&#xff1a;资本实验室近日&#xff0c;未来今日研究所&#xff08;Future Today Institute&#xff09;发布了《2019年新闻、媒体与技术趋势报告》&#xff0c;报告提出了涵盖多个领域的108个新兴技术趋势。报告显示&#xff0c;未来的新闻、媒体等行业将受到各种技术错综…

活久见:都 2203 年了,你还在使用 word 调试 API

随着信息技术的发展&#xff0c;API 变得无处不在&#xff0c;无处不用。但令人费解的是&#xff0c;都 2203 年了&#xff0c;竟然还有很多人使用 word 调试 API&#xff1f; 今天&#xff0c;西红柿将带领大家打开新世界的大门&#xff0c;放下诺基亚&#xff0c;抄起智能机&…