2012-06-15 10:06:52 liujing20051224 阅读数 20

1.Unity简介

Unity是一款标准的商业游戏引擎,而商业引擎的主要特点有收费、封闭源码和功能强大。

关于收费情况,Unity的使用费用非常昂贵,最便宜的普通版许可证也需要400美元,加强版本为1500美元。当然许可证的版本不同,引擎支持的功能也就截然不同。具有加强版许可证的引擎的很多强大功能是有普通版许可证的引擎所不具备的。但是从学习的角度来说,无须购买许可证同样可以进行,因为许可证更大的用处在于游戏制作完成后的打包与发布,不购买许可证制作的游戏是无法发售的,不过,单就学习而言,我们完全无须购买许可证,选择免费的Unity即可。
 
游戏引擎的开源与闭源是两种主要的趋势,它们之间各有利弊。如果采取开源形式,那么为了学习与钻研引擎,使用人数肯定会大幅度提高,缺点是因为已经将源代码赤裸裸地发放,所以第三方对源码加以修改,容易造成不劳而获的情况。而封闭源码则可以让引擎更加安全,并且有效地保护引擎的知识产权。Unity就是采取完全封闭源码的形式。
 
Unity引擎的功能非常强大,其中一个显著特点就是跨平台游戏开发。跨平台开发无疑为开发者节省了大量时间。平台之间的差异会直接影响到开发进度,比如屏幕尺寸、操作方式、硬件条件等的不同会给开发者造成巨大的麻烦,因为在不同的平台中开发者需要花更多时间去做平台之间的移植开发,而将大量时间浪费在这上面并不值得。Unity几乎为开发者完美地解决了这一难题,将大幅度减少移植过程中一些不必要的麻烦,但使用它后也并非一点麻烦都不会产生。因为各平台的硬件条件是不同的,比如PC的硬件条件肯定会强于移动平台,所以开发者还需要针对不同的平台做一番取舍。 
 
介绍完Unity的主要特点后,下面简要介绍一下开发环境。Unity可部署在Mac OS或Windows操作系统中,在这两种操作系统中,除了客户端操作习惯与界面有些差异以外,引擎自身的功能没有任何区别。学习Unity之前,请读者选择适合自己的操作系统。
 
2.下载与安装
 
Unity引擎官方的下载地址为http://unity3d.com/unity/download/。在撰写本书之时,Unity官方的最新版本为Unity 3.5,所以书中将主要以Unity3.5进行讲解。后续如果Unity版本进行了升级,读者亦可在Unity官网下载最新版本并结合本书进行学习。因为Unity支持向下兼容,所以在新版本中同样可以运行书中的所有游戏例子,这点请读者放心。
 
首先我们登录Unity官网的下载地址开始下载Unity 3.5的安装包。打开Unity官方下载网页(如图1-1所示)后,点击右侧的Download Unity 3.5按钮,开始下载Unity的程序安装包。下载时,官网会检测下载此安装包所使用的操作系统从而进入对应的下载页面,比如读者使用Mac OS操作系统,下载Unity时下载页面就是Mac OS版本,使用Windows操作系统时,下载Unity时下载页面就是Windows版本。当然,也可自行选择下载的Unity程序包,在图中右下方点击“ Developing on Windows”链接可切换到Windows版本的下载页面,点击“Developing on Mac OS X”链接可切换到Mac OS版本的下载页面。
 
如图1-1所示,在Download Unity 3.5按钮下方,还有3个比较重要的链接,其含义如下所示。
System Requirements:系统需求,开发环境的硬件需求。
License Comparison:许可证对比,许可证版本之间的区别。
Release Notes:版本发布说明,这里包含Unity所有历史版本的发布说明以及它们的下载地址。

 
                                 图1-1 Unity下载页面
 
目前Unity支持在Mac OS与Windows两种操作系统下编写游戏,本节我们将向读者详细介绍如何在这两种操作系统下搭建Unity开发环境。下面我们先介绍如何在Mac OS中搭建Unity开发环境。
 
1. 在Mac OS下安装Unity
下载完毕后,可以看到Unity 3.5的安装包,双击它后即可进行Unity的安装。这里需要说明的是,在首次安装Unity时需要联网注册,只有注册成功后才可以使用Unity。启动Unity 3.5安装包后,程序将弹出Unity的注册向导界面,如图1-2所示。

                     图1-2 注册向导界面
 
在页面下方点击“Register”按钮后,此时将进入Unity激活界面,如图1-3所示。在激活界面中,首先需要选择激活方式。激活方式有联网激活(Internet activation)与手动激活(Manual activation)两种。联网激活适用于未购买Unity许可证的用户,而手动激活适用于已购买许可证的用户,这里我们选择“Internet activation”进行联网激活。 
 
 

                      图1-3 Unity激活页面
 
点击“Next”按钮,程序会自动帮我们打开Unity联网激活的页面,如图1-4所示。为了完成激活,读者需要按照提示正确填写注册的相关信息,它们包括开发者邮箱与公司地址。内容填写完毕后,直接点击“Free”按钮免费激活Unity。
 
这里需要说明一下,Unity的试用期只有30天。我们知道Unity的许可证可分为普通版与加强版两种,普通版本只具备Unity的基本功能,而加强版本更为强大,比如增强了3D特效、特殊的光影效果、3D渲染特效等。然而30天的使用期限是针对于加强版本的,30天后将无法继续免费使用加强版本中的功能,需要缴费购买许可证,但是普通版本的功能仍然可以继续使用。关于普通版本与加强版本两者的详细区别,读者可点击“License Comparison”按钮进行查看。
 

 

                           图1-4 联网激活页面
 
点击“Free”按钮后,程序将打开注册完成界面,如图1-5所示,这表示Unity的 Mac OS版本已经彻底在本机中注册完毕,然后在界面中点击下方的“Finish”按钮,开始我们Unity学习之旅。
 

                                  图1-5 注册完成

 
需要说明的是,Unity注册向导只会在本机第一次安装Unity时出现,注册完毕即表示安装成功。后续如果读者需要覆盖安装或者升级,只需打开Unity程序安装包,根据提示点击下一步即可。
 
2. 在Windows下安装Unity
在Windows下安装Unity与在Mac OS下安装有细微的差别。首先下载Unity 3.5 Windows版本,然后打开它开始安装。
 
在Windows中首次安装Unity同样需要注册,由于注册方法与Mac OS完全一样,这里就不再赘述。但是在Windows下注册完毕后,需要进行安装,具体操作如下:首先按照Mac OS中的注册方法在本机完成注册,然后程序将弹出安装Unity界面,如图1-6所示。
 
点击“Next”按钮,将进入安装说明界面,如图1-7所示。
安装前,请仔细阅读安装说明,确保无误后点击 “I Agree” 按钮继续安装,此时将进入Unity选择安装界面,如图1-8所示。除了安装Unity主程序外,还可选择性安装一些插件或工具。下面简单介绍一下这些安装组件。
Unity:主程序,必须安装。
Example Project:示例程序,可供用户参考。
Unity Development Web Player:Web开发者安装包。
MonoDevelop:脚本编辑器,强烈建议安装。
 

 

                      图1-6 开始安装
 

                  图1-7 安装说明界面
 

                     图1-8 选择安装界面
选择完插件与工具后,点击“Next”按钮,将打开确认安装界面,如图1-9所示,点击“Browse…”按钮,可设定Unity程序的安装路径。
 

 

                   图1-9 确认安装界面
 
选择安装路径后,点击“Install”按钮,程序将开始自动安装。此时需要耐心等待一会儿,安装完毕后,程序将进入最后的安装完成界面,如图1-10所示,然后点击“Finish”按钮,将彻底完成Unity的安装。如果在界面中勾选“Run Unity 3.5.0f5”复选框,安装完毕后Unity将自动被打开。
 

 

                    图1-10 完成安装
 
3.游戏界面对比
 
安装完Unity后,我们来打开它,首先映入我们眼帘的就是Unity的编辑器界面。在Mac OS 与Windows下,Unity的界面非常相似,并且它们之间的功能也都完全一样,包括制作游戏的方法、脚本的编写以及打包的过程等。它们之间唯一的一点小区别就是导航菜单栏的位置不太一样,但是导航菜单栏中的选项与功能都是完全一样的。所以说,无论在Mac OS中使用Unity还是在Windows中使用Unity,其开发过程完全一样。下面我们首先在Mac OS下打开Unity的界面。
 
1. Mac OS下的Unity界面
根据Mac OS操作系统自身的习惯,Unity的导航菜单栏位于屏幕顶部,如图1-11所示,其优点是它不会因为鼠标拖动下方引擎界面而发生位置的改变。导航菜单栏中包括Unity非常重要的一些功能,后面会向读者详细介绍其中的含义。
 

                                   图1-11 导航菜单栏

首次进入Unity时会弹出欢迎窗口(如图1-12所示),如果不设置关闭,每次打开Unity时都会自动打开这个窗口,其有一些选项可以帮助我们学习Unity,下面介绍一些这些选项的具体含义。
 
  Video Tutorials:视频学习教程,这些都是Unity官方推荐的视频教程,它们非常全面,只可惜都是英文的。
 
  Unity Basics:使用事项,涵盖引擎自身的一些配置参数以及对电脑硬件的需求等。
 ;Unity Answers:问题与回答,读者可在这里与世界各地的朋友一起讨论Unity游戏开发。
  Unity Forum:Unity官方创建的开发者论坛。
  Unity Asset Store:资源商店,这里聚集着很多游戏开发所需的资源,有免费的也有收费的。
 

 

                                图1-12 Mac OS下的Unity界面

2. Windows下的Unity界面
图1-13为Windows下进入Unity的主界面效果图。和Mac OS下基本相同,只是界面的颜色与导航菜单栏的位置有点小小的区别,在Windows下Unity导航菜单栏可随窗口移动,而在Mac OS中,它则位于屏幕顶部。
 

                                            图1-13 Windows下的Unity界面
 
——摘自《Unity 3D游戏开发》
 
2015-11-03 13:22:16 Xingaaaxing 阅读数 1897

体系结构

   为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则。

Unity3D 引擎

   Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个平台.Unity3D由游戏引擎和编辑器。该引擎包含的软件组件,在游戏的研究与开发中最常见的和经常性的任务。发动机所涵盖的主题包括声音,图形,物理和网络功能。该引擎支持C#,Boo,和JavaScript脚本编程。

另一个部分是Unity编辑,作为脚本和其他组件,包含游戏场景设置和游戏的预览窗口(见图4)分层对象检查项目面板的集成开发环境。它还配备了几个多语言脚本编辑器和一个独特的预制装配系统,将在后面解释。

  

                                                          图4:Unity3D编辑器

 

有几个Unity的许可证。Unity基本功能有限的免费PC的MAC和Webdevelopment.Other的平台或完整的功能集[15]需要购买额外的许可证。

虽然有很多免费软件和专有的替代游戏引擎,如虚幻引擎™或C4™引擎选择了Unity的原因如下:

*它可以部署在Windows,Mac OSX,Web浏览器,Wii游戏机,iPhone,iPad的,Android的,微软Xbox 360和PlayStation 3。它甚至在未来计划增加闪存和Linux部署。的的部署possbilities提供很多的可能性,使用的游戏引擎或游戏引擎货币化或进一步研究。

 *Unity社区非常支持和引擎,以及编辑器是有据可查的。

*发动机是比较容易学习和工作,并通过提供所有的工具,快速原型和迭代以及快速的脚本编译支持快速软件开发的想法。

*可能部署的iPhone,iPad和iPod touch的iOS基本许可证与其他厂商相比,相对低廉的价格。创建机甲和坦克使用Unity3.0,C#脚本和MonoDevelop的IDE进行开发。你可以找到一个Unity教程附录。

Unity3D的简史

 下列日期说明在2001年和2011年[16]之间的Unity引擎的演变。
 ◾2001年Unity技术在2001年开始开发自己的游戏引擎。当时的主要诱因是创建游戏,这些游戏的基础,并创造了良好的工具[1]。
 ◾2003年在2003年的公司,由此产生的引擎将是一个伟大的产品本身的。
 ◾2005年在2005年Unity1推出苹果的WWDC的舞台上。
 ◾2007Unity2.0在2007年推出,并增加了地形引擎,实时动态阴影和视频播放等等。
 ◾2008年在2008年推出Unity的iPhone和卡通网络推出FusionFall,游戏已经播放超过800万人次。

 ◾2010年在2010年Unity3.0发布了几十个新功能,如资产管理和兽光照贴图。

 ◾2011团结超过500万的开发者和60万网络播放器安装。

游戏架构

 机甲和坦克的架构组成模块和Unity的场景架构。

 主要模块

    本节介绍了最重要的模块和子系统级别上他们的关系。游戏的建筑风格,是一个对象与数据capsules.The的下面的UML组件图说明子系统及其关系网络。

 

游戏逻辑

   此模块管理当前玩家和AI配置倒计时timerand当前的游戏状态(暂停,等待网络回复)。

AI(人工智能(Artificial Intelligence) ,英文缩写为AI

   AI模块包含背后的逻辑单元,组和球员AI.The单位的AI寻路或障碍物避免使用不同的转向行为控制单元的状态。组AI管理组的行为和活动,如组寻路。更高的层次上管理播放机的所有组由播放器模块。

人工智能机器学习保存和加载它的数据使用的持久性数据模块的接口。

Persistant data持久性数据

   此模块是负责数据之间不同的游戏sessions.Among其他应可用于保存和加载,存储查找表和图寻路模块和管理学习AI的accumulateddata的机器。

Game actors游戏参与者

  游戏参与者在游戏中的地形,单位或建筑物。他们的3D模型获得通过Unity3D的渲染管线的可视化。每场比赛的演员拥有AI模块,控制它的行为。

Steering behaviours指导行为

  指导行为的计算力量,影响如何以及如何快速自主游戏代理能动,应该可以用于避障,人流或简单的寻找任务。

Pathfinding寻路

  这模块负责创建一个pathgrid,障碍物信息收集和提供各种寻路请求aninterface的。为了获得更好的性能的一些信息保存到从磁盘中加载。

Input输入

  此模块跟踪用户的输入,对其进行处理,并生成反馈。

Network网络

  网络模块是负责所有游戏演员的状态管理是保持比赛状态,在两台机器上都保持一致,以避免抖动网络单元运动网络game.Another责任。

GUI

 图形用户界面(GUI)显示所有按钮,菜单,在小地图和倒数计时器。它也负责为这些元素的功能和交互依赖与用于此目的的游戏的逻辑模块。

3D渲染

  该模块主要管理Unity3D的。场景的主摄像头确定需要渲染的对象,并把它们发送通过渲染管线。Unity3D的封装最渲染的细节,而且还提供了通过像素和顶点着色器的访问。

Unity场景设置

  在游戏中的每一个图表示由Unity3D的场景。下面是一个典型的场景设置在Unity层次(一)和(二)在现场窗口看起来像:

                                      

                                                                   Unity层次的地图

             

                                                                          场景视图的地图

现在所有的游戏对象从顶部面板底部进行说明。

CWalls

  这个对象包含自定义绘制墙节点和墙壁边缘。另一种是使用自定义绘制墙壁到calculatethem取决于地图的几何。

Directional light(定向光)

  此灯仅用于计算地形光照贴图。关闭之后,由于性能的原因。

Game Music(游戏音乐)

  持有游戏的主要音乐和播放现场启动。

GameController(游戏控制器)

  GameController游戏物体持有并管理所有的游戏对象,管理游戏的逻辑。它包括以下对象:

CursorController(光标控制器):

   管理光标的外观和背后的逻辑。

GameInstantiator(游戏实例化):

   这个重要的游戏对象是负责实例化其他对象需要创建非特异性顺序。

                  

                                 GameInstantiator in the Inspector

                  

                                   GameController in the Hierarchy

  GameInstantiator持有的的地图,PathCreator路径创建和管理障碍,管理球员配置和设置,是用来处理用户输入的的InputControl游戏物体,游戏场游戏物体和参考玩家游戏物体上的建筑物referenes定义了可播放的区域的地图。

 它还包含了玩家的重生点和自定义路径和墙壁的引用。

GUI

  拥有地图的所有GUI对象。

Machine Learning Controller

   此游戏物体控制的所有功能,机器学习需要。

spawn1, spawn2

  实际玩家的重生点。重生点的标志是绿色立方体“场景视图。  

HPaths

   自定义路径节点,在地图的边缘。自定义节点在场景编辑器中标记,并概述红线。     

Main Camera(主摄像机)

   现场的主摄像头和音频监听。所有的3D声音是从相机的角度观察。     

PlayArea(游戏场)

  定义实际可玩的地图区域。

Base Prefabs(基地预制)

  散落在地图上的建筑物。

Terrain(地形)

   Unity地形对象。

TestRunner

  一个物体,用于运行单元测试与Unity3D的的单位testingframeworkSharpUnit的。

MVC Pattern(MVC模式)

  Unity引擎的设计鼓励MVC(模型 - 视图 -控制器)面向engineering.In的我的情况下,结构看起来像这样:

  

                                                              图5:MVC模式的体系结构表示

模型包含了所有的游戏对象,组件和数据文件。游戏物体的渲染器和摄像机对象的访问。

视图呈现模型和主要管理Unity3D的引擎渲染。它需要accessthe持有模型的3D模型,纹理,材质和效果。它还具有什么输入选项的影响。

控制器接收用户输入并调用模型对象上的方法反应。这是在我的游戏中所表示的输入子系统。用户能影响与他的输入的视图。

Multiplatform Development(多平台发展)

  Unity允许部署项目在不同的平台上有轻微的变化。演示和功能在很大程度上是保持取决于平台的capabilities.However,在某些领域,如在不同的设备上的输入机制存在重大分歧。

  抽象工厂设计模式应用于设计这些组件。

The Abstract Factory Pattern抽象工厂模式

                              

                                                                                    图6:抽象工厂模式

抽象工厂模式(见图6)保护客户从不同的平台上实现相同的概念在不同的APC与平台是一家集的AbstractProduct类。这些类表示一个概念,是支持所有的抽象工厂platforms.An类声明创建单一产品的经营,ConcreteFactory类代表一个特定的平台。

客户端只使用抽象工厂和抽象产品的方法,因此从一个平台的具体实施保护。

Input and Persistant Data(输入和持久性数据)

   主要有两个方面的游戏,不同的实施要求是输入机制和usageof的持久性文件的数据。Unity3D中不支持跨plattform数据库。这就是为什么机甲和坦克使用的持久性数据在磁盘上的二进制文件。所有平台得到了他们对于自己的能力和自己的实施,支持的文件格式。

 

为了保持可读性和灵活性以下适应跨平台的输入处理的抽象工厂模式:

               

                                                                     图7:输入子系统结构摘自

 

这仅仅是一个小所涉及的所有平台和命令,选择用于演示的摘录。

InputManager被附加到游戏物体在场景中的InputControl。它调用CommandImplementor的Execute方法的每一帧里面的更新功能。执行方法的CommandImplementor遍历所有添加的命令,检查他们的执行情况表示满意,并调用Execute方法,如果是这样。

 

输入子系统的组成部分的图中的抽象工厂模式:

              

iOS+Unity

     机甲和坦克被创造的过程迭代开发,这是什么原因,为什么游戏已经播放任何调整之前为iPad™。

     本章介绍和分析面临的挑战和解决方案移植机甲和坦克的iPad™。

Maximum Polygon Count(最高多边形计数)

     其中一个最明显的限制,适用于iPad™游戏的多边形数量的图形芯片能够呈现每个frame.It的横空出世,超过30万个多边形,每帧开始下降,低于25 FPS的帧率对iPad™。在3D建模软件,通过手动消除边缘和应用预定义的算法减少多边形,从一开始,某些型号甚至rebuiilding减少多边形计数后,目前在所有平台上的多边形数量是:

               

平均多边形数量大约是每单位300。如果所有的24个敌人和播放器单元的相机拍摄的,在一帧中产生的多边形的数量将是7200,平均约8500,在最坏情况下24runners.Adding最大4000地形的多边形(平截头体的其余部分的地形得到扑杀),最重的帧将给予约12500GPU多边形渲染。

Draw Call Reduction and Lights(绘制减少呼叫和灯)


即使在移动设备上不俗的表现,更重要的是每帧绘制调用的数量。一场平局发出呼叫的GPU每次绘制一个模型。如果模型有n子网格就会造成至少Ñ战平calls.EveryGUI质地,选择飞机和健康栏添加一个调用到现场。

额外抽奖调用另一个来源是每像素光照,导致额外的绘图调用每一个光pass.That就是为什么合并成一个模型中的所有子网和型号不使用动态照明。所有的模型和地形纹理的灯光烤英寸光影烘烤计算每个纹理获取静态光源照亮奠定了光照贴图在纹理的亮度。看上去好像他们的灯光的影响,虽然没有计算模型。图8显示了几个模型,而无需光照贴图或灯光效果。

          

                                  图8:熄灭纹理材质着色器和没有灯光的烘烤模式截图

        

                                                                图9:游戏扩大统计窗口右上角的视图

这是说,可以结合Unity若干个对象,共享相同的材料制成的,在运行时,在一个单一的绘制调用的绘制在一起。这种方法被称为动态配料[18]。图9显示了66战平调用以下来源所造成的一个场景:

(GUI)图形用户界面


8绘制调用之缩小贴图按钮,,倒计时倒计时文本的+24个图斑+8号楼地图斑+1相机地图现货。总结41GUI造成绘制调用。

Terrain(地形)


     4画通话。其中每个质地。

Visible Models(可见模型)

   14平局呼吁。每个模型会导致比3战平调用自身的。一个用于单元网格,一个为healthbar网格和一个用于选择平面网格。低的数字都可以解释与Unity的动态配料。

Terrains(地形)


     Unity3D中没有支持的地形为iOS,直到Unity3.4发布于2011年7月[19]。为了找到最佳的解决方案机甲和坦克,地形实施的两种可供选择的方式已经过测试:模拟地形在3D程序:一个3D建模程序和地形分割成不同的部分(见图10)。分区的效果,大部分分部视锥Unity扑杀。那meansthat只有至少部分可见的段得到呈现。

                         

                                                                            图10:仿照地形突出部分

这种技术被丢弃创造新的地形,因为这个过程会非常complicatedcompared Unity的地形系统,纹理大小是非常大的或质量受到影响。*地形:地形移动系统移动系统是一个解决方案,可通过Unity资产商店T4M地形可以用于移动设备,并可以转换成Unity的地形。原来,这个解决方案的性能是不够的游戏。

地形最终解决方案是使用Unity地形引擎,具有非常低的质量设置。这是唯一可能后Unity3.4发布于2011年7月加入Unity地形对移动通信系统的支持。

GUI-Optimization(GUI优化)


该的Unity引擎提供两种方式来实现GUI。一种方式是使用Unity的GUI的系统UnityGUI,需要它的功能,是一个特殊的功能calledinside名为OnGUI(),即执行每帧两次和onceevery事件的。这个系统只用于主菜单,并暂停菜单,在allvalues​​需要计算外OnGUI功能。

GUI纹理用于所有其他GUI元素象的GUI按钮和小地图上以维持性能。GUI纹理的平面图像中显示的2D和每帧渲染一次。

Script-Optimizations(脚本优化)


为了授予脚本的性能高,最便宜的方法进行跟踪与profiler.It横空出世,被称为最昂贵的方法可以通过寻路或转向行为子系统。寻路已被优化,如下文所述在AI部分。有人还提出确保昂贵的功能,如转向行为和其他AI程序不会调用每一个帧。


2017-08-10 09:22:24 qq_31971935 阅读数 1030

一、简介
由英国Unity Technologies公司开发,Unity3D是主要开发三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台综合型游戏开发工具,是一个全面整合的专业游戏引擎。unity3d是一个游戏开发引擎,或者算是一个游戏开发平台,不是一项技术;
二、版本介绍
1、windows版本:Unity3d 5.6.0f3
大陆发布版本:Unity3D PRO虚拟现实、跨平台应用程序开发引擎(商业版)
Unity是免费的,官方为Unity PRO 和Unity PRO提供30天全功能试用期。
可以使用C#和JS快速上手他。
三、如何学习
1、了解unity3d菜单,视图界面
2、理解场景里面的坐标系统,输入系统,简单的向量概念。
3、学习创建基本的场景的一些基本概念:游戏对象,组件,脚本。在界面上分别体现在层次视图,项目视图及属性视图,要理清楚彼此之间的关系。
4、学习资源导入方面的一些基本元素:网格,材质,贴图,动画等。
5、学习脚本的生命周期,Start,UpDate,ONGUI这些基本的方法。了解,预制,时间,数学等常用的类及相关方法。理解游戏对象,组件,脚本彼此之间的关系。
6、进一步学习摄像机,灯光,地形,渲染,粒子系统,物理系统等等,这些每一个深入进去都是一个很复杂的主题。
7、一些更高级的概念:向量的加减法点乘叉乘,光照法线贴图,内存管理,图形优化等。
四、Unity3d安装
可参照:http://www.cnblogs.com/ruixinyu/p/6007586.html
1、点击
2、破解:
3、vs调试工具安装:
五、界面介绍
1、项目视图
项目视图相当于一个资源仓库,在此视图中,用户可以使用它来访问和管理你的项目资源
2、
六、在wpf中使用unity3d
https://www.oschina.net/code/snippet_1017546_57546
http://www.cnblogs.com/easyfrog/archive/2013/09/03/3300165.html
http://www.songshizhao.com/blog/blogPage/78.html WEBGL方式
1、引用
2、引用
七、webgl
是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等
八、
1、项目中不支持WindowsFormsHost
九、

2019-02-19 16:07:24 ruanjianbu 阅读数 496

一、unity3d简介(平台,应用范围,经典游戏)

Unity3d是当时最流行的游戏引擎之一,它具有可视化编辑器,并能通过编写脚本来自定义编辑器,能够快速开发出游戏原型,Unity3D还具有强大的跨平台能力,不但在部署目标方面跨平台(PC、Web、移动设备以及家用机),还包括开发工具跨平台(能在Windows或Mac OS上开发游戏)。相比与RPGMaker的简陋或虚幻引擎的难以上手,Unity3D对于一个有编程基础的初学者上手轻而易举。用Untiy3D开发的游戏也不在少数,从手机游戏《纪念碑谷》到PC游戏《Cuphead》,数不胜数,同时由于Unity3D的强大引擎,也可以用来进行机器人仿真、火灾模拟等工作。

二、界面,基础操作(界面,创建场景,灯光系统,摄像机,组件,脚本语言)

1、界面

Unity3D的主界面和一些三维建模软件非常类似(例如,3DsMAX,C4D等)
左上角是scene视图,这里显示了场景中的物体并且可以对场景进行基础的操作;
左下角是Game视图,这是游戏运行时的主要界面;
Hierarchy视图,当前场景中物体目录;
Project视图,显示当前工程的文件夹等;
Inspector视图,当前选中的物体的属性以及组件。

2、基本操作

通过scene视图上的按钮可以对选择物体进行操作,也可以通过快捷键进行抓取(Q)、移动(W)、旋转(E)、放大®操作,鼠标中键平移场景,鼠标滚轮对场景进行缩放,按住Alt+鼠标左键可以旋转查看场景。

通过顶部的工具栏或在Hierarchy视图上右键,可以创建新的3D物体或2D物体,以及灯光、camera等。

在Project视图中,可以右键创建新的场景、预设、或者脚本文件。

Inspector上集成了物体的大部分属性,并可以通过Add Componment添加新的组件。

三、demo制作(坐标系统,视角控制,移动,碰撞,ray,敌人AI,预设,材质,etc)

Unity3D可以在官网上免费下载,只有制作者的游戏达到一定盈利后Unity才会抽取一定的分成,并且unity3d的官方社区具有大量的教程和中文文档,也非常适合自学。官网上最经典的游戏教程是《Space shooter》,每集教程都在五到十分钟,简单却能学到unity3d的很多基础知识,有兴趣的可以去官网上学习。接下来我们将通过一个FPS游戏Demo介绍Unity3d游戏制作流程。

首先打开Unity并且创建一个新的工程,在这个新的工程中,hierarchy视图中默认带有一个Main Camera 和Directional Light,其中Main Camera的视角即是Game视图。在接下来的制作中我们用不到这两个对象,现在我们把这两个对象delete掉。

在一个游戏中,首先要有场景,无论是马里奥的砖块世界还是英雄联盟的召唤师峡谷,有了场景,玩家才可以进行游戏。接下来让我们先搭建一个场景。

单击顶部工具栏的GameObject-3D Object-Cube,创建一个立方体(在hierarchy视图中右键创建同理),我们可以看到场景中出现了一个111的立方体。

选中这个立方体,通过scene工具栏上的移动、旋转、缩放工具可以任意修改这个立方体。

先把这个立方体拉伸作为地板,选中缩放工具(或者按快捷键R),可以看到立方体的坐标轴上的三个箭头变成了方块,按住鼠标拉动方块可以对立方体长宽高进行修改。另一种方法是更改inspector视图中的scale参数,选中cube,把它的scale设置为(50,1,50) 我们便制作出了地板。

在这里插入图片描述

接着通过同样的操作,创建新的object(也可以尝试创建别的立体形状),对他们位置,旋转,大小进行更改,完成整个场景的搭建。

TIPS:在场景中元素较多难以选中物体时,可以通过hierarchy视图选中物体,按F便可快速定位到scene中的物体位置。

在这里插入图片描述
创建好的场景

接着,创建一个empty,选中所有的物体,拖到这个empty下,使之成为GameObject的子类,接着把这个GameObject重命名成obstacles。

在这里插入图片描述

TIPS:场景中物体过多时,hierarchy中会比较杂乱,此时可以通过create empty创建一个空的GameObject来把相同的元素放在一起,以后如果要对这类物体进行整体操作,对这个空的GameObject进行操作即可。

有了基本的场景之后,我们便可以创建玩家控制的角色了,创建一个Capsule和camera,并把camera拖拽到Capsule上,并把camera的Position设为(0,0.5,1)。capsule便是我们要控制的角色了,capsule为角色的body,camera是角色的眼睛,也是game视图看到的场景。最后在hierarchy视图中把capsule重命名为player。

在这里插入图片描述        capsule所代表的玩家在scene中的视图以及game视图。

概念:本地坐标和全局坐标,在Unity3D中,物体的坐标是基于它的父类的,上例中,camera的坐标(0,0.5,0)就是基于capsule的中心点的坐标,而capsule没有父类,或者可以看作是场景的子类,因此它的坐标就是在场景中的坐标,称为全局坐标。本地坐标和全局坐标的区别在接下来的控制代码中着很好的体现。

有了场景和角色,接下来便可以编写脚本控制角色移动了。首先我们要明白,Unity3d中对物体的所有改动都是基于组件(component)的,对立方体的移动、旋转、缩放是通过改动物体的Transform组件实现的,相应的我们可以看到在一个默认的GameObject中,除了Transform,还有Mesh Filter 和Mesh Renderer 和Box Collider组件,这些组件可以自由的添加和删除。

对于我们所控制的角色,我们不需要Box Collider,因此点击Box Collider组件右上角的齿轮,选择remove component,接着点击Add Component按钮,为player添加一个charactercontroller组件,这个组件可以让物体的行为表现的更像一个玩家。

                 更改后的player属性

在这些工作完成后,我们的游戏已经基本有了雏形,具有一个第一视角的角色,一个充满各种元素的场景,接着便可以为player编写控制代码了。

首先在project视图中右键创建一个新的文件夹,右键-create-folder,命名为Scripts,(这个文件夹用来存放所有的脚本文件,在一个大工程中,为所有的素材分好类是一个很好的习惯。)接着在这个文件夹下创建一个新的C# Script文件,命名为MouseControl,这个脚本用来控制鼠标的输入。

在这里插入图片描述
       创建好的MouseControl文件,Inspector中可以看到文件的代码预览

双击打开这个文件,我们可以看到代码的大致框架,在MouseControl类下,有两个默认函数,start()和Update(),start()函数只有在当前脚本加载时运行一次,update()函数在游戏运行每帧运行一次。要想响应鼠标的输入,我们只要把对鼠标输入的监听写在update()中即可,接着只要把MouseControl作为组件添加到player上,代码就能运作了。

在这里插入图片描述

代码详解:
在MouseControl脚本中,我们声明了public的枚举类型RotatioAxes(输入方式),sensitivityHor(水平灵敏度),sensitivityVert(垂直灵敏度),以及MINVert,MAXVert(垂直控制最大最小角度),在Unity3d中,所有的public变量都可以在inspector视图中直接修改,所有把需要修改的变量设置为public,便可以方便的在unity中调试了。

如图所示,当前控制方式Axes的值为MouseXAndY,即为同时控制X轴和Y轴,水平和垂直灵敏度都是10,垂直控制角度为(-45°,45°)。

在Update()中我们为Axes的三种模式设置了不同的输入方式,Input.GetAxis()用于获取响应输入量的值,所有的输入量可以在Edit-Project Settings-Input中查到。

只控制水平移动,只要用transform下的Rotate()函数进行旋转即可,
Rotate(x,y,z):根据对象的本地坐标绕轴旋转(x,y,z)度

只控制垂直移动,由于要限制垂直旋转在-45~45度内,再简单的用Rotate()函数就不行了(思考为什么),这时要用transform.localEulerAngles设置对象的旋转值。

rotate()函数相当于使对象根据当前角度再旋转相应的角度,如果想让物体绕x轴旋转两圈,rotate(720,0,0)就可以了,而transform.localEulerAngles属性类似于物体transform组件中的Rotation属性,每个轴的范围在(0,360)。

同时控制水平和垂直旋转,同垂直控制,只要给物体的transform.localEulerAngles属性设置一个新的值就行了。

把MouseControl拖到player上,设置Axes为MouseXAndY按下unity3d顶部大大的播放键,这时在game视图中就可以轻松的控制镜头的转动了。接着,我们为角色添加移动代码。

创建新的脚本文件MoveController,跟鼠标控制一样,我们也声明了public变量:moveSpeed,用来方便修改移动速度。在这个脚本中,我们可以看到在start()函数中:
         characterController = GetComponent();
这句代码用来获取到角色上的CharacterController组件,每个对象上的component可以看成是一个个独立的模块,要想在一个模块中用到另一个模块的功能,就要用到ComponentType t = Component()来实例化一个组件的对象t,接着便可以用t来调用另一个component上的函数了。在这块代码中characterController变量(小写是变量)引用了对象上的CharacterController组件,并通过CharacterController组件上的Move()函数控制角色的移动。

通过对比前一个脚本代码,在这我们也可以通过设置transform的position值移动角色,但是我们可以想想,为什么之前要移除Box Collider组件(碰撞体),而添加一个CharacterController组件。这是因为CharacterController中也包含碰撞体以及其他让角色的行为更像一个玩家的属性,因此在使用Move()函数时,在碰到边界或者障碍物便会产生碰撞而不会直接穿过,而通过position属性但组件设置不正确时有可能参产生”穿模”的情况。

在这里插入图片描述

这样基础的控制镜头和移动的代码就完成了,把这两个脚本都拖到player的组件上,并设置axes为MouseXAndY,按下play键,就可以自由的在场景中移动了。但我们仔细观察代码可以发现:
       movement = transform.TransformDirection(movement);
这句代码把本地坐标转换成了全局坐标,如果删除这句代码,对移动会产生什么影响,大家可以自己试试看。



除此之外,为角色添加重力、跳跃等功能也很简单,此处由于篇幅有限,留给大家自己尝试。




本篇教程仅面向对制作游戏感兴趣的初学者,文中并未涉及到灯光系统、天空盒、UI、粒子系统等更深入的功能介绍,仅作为抛砖引玉,希望能激发大家编程和制作游戏的热情。

2013-01-21 14:53:57 jeksonal 阅读数 16695

unity3D 用3DMax 做的模型时需要注意几点

1:方向问题
2:模型尺寸问题

3:模型所占资源大小问题

 

3DMax 做的东西导入到 Unity3D 中,在 Unity3D 引擎中 X 会被反向旋转 90 度();个人处理方式是建模时先将模型 X 轴旋转 90;再调节模型;

3DMax 做的东西导入到 Unity3D 中,由于 3DMax 默认的单位处理机制与 Unity3D 不一样,而导致显示过小的问题;所以,在制作模型前先调节好 3DMax 中的系统单位设置

具体操作:

 菜单栏: 选择 “自定义”  ,

再选择 “单位设置”-- >

 接着点选 “系统单位设置 ”  --->   将系统单位比例设置成:  ;再点击 “ 确定” 保存!

在模型的制作过程当中,为了使物体的坐标在物体的中心点,要记得冻结物体的坐标属性

当模型制作完成时,导出为 FBX 格式时还需注意:

在导出的 设置面板中 :

点击高级选项,然后出现:

确保 “ 场景单位转化为:”的设置为 "Meters"


模型导出后,模型资源可能很大,原因有以下几个:

1: 检测一下材质贴图的格式是否为:.png 的,不是请改过来 ;

2:看模型当中是否有过多的独立存在的物体,将不需要单独 存在给它合并在一块!


要是模型导入到Unity3D 中后,引擎运行变卡,就得看看模型的面是不是太多了!


没有更多推荐了,返回首页