热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Unity3D游戏开发入门——界面与简单编程

本文由D5Power首发于天地会,转载请标明原作者和出处。周末听Sliz说Unity正式支持导出Flash了,作为一款成熟的游戏引擎,相信不少兄弟都对她很感兴趣。今天中午抽了点时间研究了一下,在这里做
本文由D5Power首发于天地会,转载请标明原作者和出处。

周末听Sliz说Unity正式支持导出Flash了,作为一款成熟的游戏引擎,相信不少兄弟都对她很感兴趣。今天中午抽了点时间研究了一下,在这里做个笔记,算是本系列文章的一个开端。本文非100%原创,借鉴和参考了部分英文资料,在文中会有原版的连接。对于Unity3D我也是刚刚研究,文中如有纰漏之处,望各位海涵。同时欢迎各位弟兄指正!

零 下载与安装

官方网站 http://www.unity3d.com
下载地址 http://unity3d.com/unity/download/
安装好后,在开始界面里有视频介绍和文档介绍的连接。不再赘述。

一 界面



Unity3D的界面基本上如上图分布,来看一下各区域的功能。

红色:工具栏,可以通过工具栏来设置当前的鼠标功能(缩放,移动等等),进入或退出游戏运行状态
橙色:视图,即编辑/游戏演示窗口
绿色:对象列表,本窗口列举了游戏中的全部游戏对象(摄像机,灯光等等)
蓝色:游戏素材窗口,包括脚本,贴图,模型等等
紫色:属性区

小技巧:选中某对象(不管是在绿色的列表区,还是在橙色的视图区)后,把鼠标移到橙色的视图区,按下F则视图自动对准该对象


二 创建游戏对象

和我们使用FB开发一样,在开始Unity开发之前,必须要创建一个新的项目(File->New Project)。
之后,就可以进行操作了。我们来创建一个平面(Plane),一个方盒子(Cube)和一个追光(Spotlight)

创建平面:GameObject->Create Other->Plane
创建方盒子:GameObject->Create Other -> Cube
创建追光:GameObject->Create Other->Spotlight

如果你创建完成后,并没有看到他们,可以在列表中选择某对象,然后把鼠标移动到橙色视图区,按下F。如果你看到你的对象是线条,类似下面这样:



说明你的对象被遮挡住了,调整他们的位置到合适就可以了。如何调整位置?可以试用工具栏的第2个功能按钮(移动)



选择该功能后,在列表区(绿色)或视图区(橙色)选择游戏对象,均可看到3方向的箭头,拖动对应方向的箭头即可完整在该方向上的移动操作。

试着把聚光灯方在方盒子的上方,并旋转聚光灯让他对准盒子吧。类似下面这样



最后,我们希望摄像机的视野,和我们现在视图区的一致。在列表区(绿色)中选择摄像机(MainCamera),然后选择菜单GameObject->Align With View,可以发现,摄像机的预览视图中,变成了和我们现在的视图区一样的内容,当然,尺寸小点-.-



三 编程,追光跟随的,由键盘控制的盒子

在Unity中,我们试用Javascript进行程序编写,语法和AS差不多。我们先实现简单的功能,让键盘可以控制盒子移动(D5的惯例。。。哈哈),然后,让追光一直跟着盒子。

首先,我们要新建一个脚本。Asset->Create->Scrpit。这个时候,Unity自带的脚本编辑器会自动打开(MonoDevelop),我们可以看到,已经自动帮我们生成了Update函数,这个和AS的Event.ENTER_FRAME是同个概念的,即每帧都会运行。然后,我们输入以下代码:
  1. var speed = 5.0;

  2. function Update () {
  3.         var xspeed = Input.GetAxis("Horizontal")*Time.deltaTime*speed;
  4.         var yspeed = Input.GetAxis("Vertical")*Time.deltaTime*speed;
  5.         transform.Translate(xspeed,0,yspeed);
  6. }
speed是移动速度
Input.GetAxis("Horizontal")和InputGetAxis("Vertical")分辨是当前键盘的状态。如果按下A和D,则Horizontal返回1或-1,W和S则Vertical返回1或-1,否则都返回0。
Time.deltaTime 记录了渲染最后一帧所消耗的秒数。我们根据这个来进行位移 (这里我也没太明白,还在研究,我比较容易接受.x+=speed...)

脚本写完了,接下来就需要把这个脚本绑定到某一个游戏对象上,我们想控制盒子,自然要绑到盒子上。选择盒子,然后在菜单中选择Component-->Script,选择刚才的Scrpit文件。可以看到属性栏里,绑定成功。



现在测试一下游戏,可以发现,方盒子已经受到键盘的控制了。下面,我们要让灯光一直照向盒子,先看代码:
  1. var target:Transform;
  2. function Update () {
  3.         transform.LookAt(target);
  4. }
这里我们定义了一个target,后面再解释如何用,和刚才对盒子的操作一样,我们把这个脚本绑定到聚光灯上。



刚绑定的时候可以发现,target的值是None,因为我们还没有指定哪个对象作为target,点击None右边的箭靶一样的图标,会出现选择窗,在列表中选择Cube,target的值就被指定了。接下来,测试你的第一个“游戏”吧。

总结

相对于A3D,AWAY3D来讲,UNITY3D提供了完善的游戏开发环境。对于Flasher来讲,Javascript脚本也不会让我们过于陌生。如果Unity可以完美的导出到FP11的话,相信还是灰常强大的。本笔记不定期更新:)附件中有本次项目的源码


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
author-avatar
手机用户2502900175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有