当使用3D即将到来的场景时代来制作2D项目时,可以把摄像机的Projection(投影)值调为______

Unity常见面试题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Unity常见面试题
&&unity常用的的面试题
你可能喜欢君,已阅读到文档的结尾了呢~~
gamemaker6 3d篇翻译_碧绿的湖
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
gamemaker6 3d篇翻译_碧绿的湖
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之2D游戏开发制作原理(二十一)
Unity3D研究院之2D游戏开发制作原理(二十一)
围观88596次
编辑日期: 字体:
经过了4个月不懈的努力,我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了。这里MOMO先打一下广告,图灵的出版社编辑成员都非常给力,尤其是编辑小花为这本书付出了很大的努力,还有杨海玲老师,不然我也无法完成这本书的编写。等这本书出版了大家记得买喔,哇咔咔~ 下面,这篇文章是MOMO 3D游戏开发书籍中的一小段章节的修改版本,本篇文章我们将探讨一下Unity3D中如何来制作2D游戏。目前市面上已经有非常成熟的2D游戏引擎,比如cocos2d 或cocos2d-x等,并且都是免费的开发者可以直接用来制作2D游戏。然而使用3D引擎来制作2D游戏会让游戏画面更加附有立体感,因为2D游戏中Z轴永远是0,而3D游戏中Z轴是可变化的。
接着说说在Unity3D中制作2D游戏的原理。在Unity3D中绘制贴图的方式大致可分为两种,第一种是在GUI中绘制贴图,第二种是在网格面上绘制贴图。先说说第一种,GUI主要用来制作简单的游戏2D界面,比如游戏主界面中绘制的“游戏名称”、“开始游戏”、“保存游戏”、“退出游戏”一些按钮或界面中一切其它的高级控件,文本框,输入框等等、GUI只能制作简单的图形化界面,因为它的渲染效率非常低,它与3D世界中网格模型的渲染机制完全不一样。第二种的属于将图片绘制在3D中网格平面中,它的渲染效率远远高于GUI中,在制作2D游戏时都是将所有贴图绘制在平面模型对象之上,最后用摄像机以90度垂直的角度照射这这些平面。
下面我们开始学习在Unity3D中制作2D游戏的原理。2D游戏又可以分为两种,区别是物体碰撞时带物理引擎或不带物理引擎。带物理引擎就好比《奋斗的小鸟》一样,大家应该都玩过,小鸟发射后下落击落其它物体将发生物理的碰撞。(我没有细看这款游戏,但是我知道2D 与3D引擎都都可制作),不带物理引擎的就好比《捕鱼达人》这种游戏,游戏中碰撞都是由代码自己来完成的,经典的2D碰撞监测包括:矩形与矩形的碰撞、点与矩形的碰撞、圆与圆的碰撞等。今天这篇文章我们主要讨论第二种不带物理引擎的2D游戏。
如下图所示,我们盘点一下2D游戏中必备的几个元素。
摄像机:无论是3D游戏还是2D游戏摄像机都是非常重要的属性,移动摄像机即可更改屏幕中显示的内容,游戏地图的坐标永远都不会发生改变。
地图:2D游戏中的地图一般是由tile拼接而成,它可由地图编辑器生成然后将每一块tile绘制在整个贴图中,最后将贴图贴在平面网格面之上即可。还有一种作法是将两个或两个以上屏幕大小平面以队列的形式排在屏幕后面,当摄像机移动超出第一块面显示范围时,将它的坐标移动在第二块面后面,此时地图就形成了一个排序的队列。为了让地图的效果更加完美,一般地图可以由好几层来组成,比如背景层、与主角的遮挡曾、物理层等等。
地图拼接:地图的排序队列中两张图应当是可以无缝拼接,这个应当是由美术来提供资源,这里我就不那么细致了将远离说明白即可。
主角:它的范围就比较广的,敌人、物品等等出现在地图之上的都可以使用它。如果控制主角移动,摄像机移动的同时主角也当跟随移动,并且保持屏幕中的移动比例,除非摄像机无法移动,这时将直接移动主角在屏幕中的坐标。 说的有点绕了呵呵,大家仔细想想哈哈。。
然而上面的一切面是由Plane面来完成。
再Unity层次视图中选择摄像机对象,右侧监测面板视图中我们看看摄像机组件的一些属性,如下图所示。需要注意的就是Projection 投影类型。
首先我们应当修改摄像机的属性,默认摄像机投影的类型是Perspective,它保持摄像机以扩散的的形式照射着不利于2D平面的展示。这里我们应当选择Orthographic,这样摄像机将直直的照射在显示的区域。
Perspective类型
Orthographic
从侧面观察摄像机,通过这两张图我相信大家应当能看懂为什么2D游戏要用Orthographic了吧,摄像机的投影类型是可以在代码中动态的修改的。
//得到游戏中摄像机对象
Camera camera = Camera.mainCamera;
//设置摄像机投影类型OrthoGraphic
camera.isOrthoGraphic = true;
//设置摄像机投影类型Perspective
camera.isOrthoGraphic = false;
在代码中取得摄像机投影的区域大小,它也可以动态的修改,这样就可是实现摄像机拉近与拉远的效果。根据投影区域的大小配合着整个地图的宽高来写判断条件,避免移动摄像机时超过地图的范围。
Camera camera = Camera.mainCamera;
Debug.Log(camera.orthographicSize);
接着我们使用代码来得到地图面的宽高,这段代码写的就比较精细,因为网格面是可以缩放的,首先得到网格面的宽与高,然后分别乘以缩放系数就可以得到真实面的宽与高,然而Unity中的坐标是以“米”为单位。下面代码中用到了中文,如果要想在编辑器中显示中文C#语言需要修改编码格式为UTF-16。JavaScript修改编码格式UTF-8或UTF-16即可。
1234567891011121314151617181920212223242526272829
using UnityEngine;using System.Collections;&public class Test : MonoBehaviour {& void Start ()
{& &&&&GameObject plane = GameObject.Find("Plane0");
//得到面默认宽度
float size_x = plane.GetComponent&MeshFilter&().mesh.bounds.size.x;
//得到面宽度的缩放比例
float scal_x = plane.transform.localScale.x;
//得到面默认高度
float size_z = plane.GetComponent&MeshFilter&().mesh.bounds.size.z;
//得到面高度缩放比例
float scal_z = plane.transform.localScale.z;&
//原始宽度乘以缩放比例计算出真实宽度
float mapWidth = size_x * scal_x;
float mapHeight = size_z * scal_z;&
Debug.Log("得到面的位置:"+plane.transform.position);
Debug.Log("得到面的宽度:"+ mapWidth);
Debug.Log("得到面的高度:"+ mapHeight); }&}
有了摄像机照射的区域以及背景地图的宽高尺寸那么就可以在代码中编写逻辑判断条件啦。下面我们来使用简单的代码控制摄像机移动以及主角移动。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
using UnityEngine;using System.Collections;&public class Controller : MonoBehaviour {& //动画数组 private Object[] anim; //主角对象 private GameObject hero; //限制一秒多少帧 private float fps = 10; //帧序列 private int nowFram; //记录当前时间 private float time;& void Start () {
//得到资源名称为down文件夹中的所有对象资源
anim = Resources.LoadAll("down");
//得到主角的对象
hero = GameObject.Find("hero");
}& void FixedUpdate ()
//上、下、左、右平移摄像机
if (Input.GetKey (KeyCode.A))
transform.Translate(-0.01f,0,0);&&&
if(Input.GetKey (KeyCode.D))
transform.Translate(0.01f,0,0);&&
if (Input.GetKey (KeyCode.W))
transform.Translate(0,0.01f,0);&&
if(Input.GetKey (KeyCode.S))
transform.Translate(0,-0.01f,0);&&
//上、下、左、右平移主角 &&&&if (Input.GetKey (KeyCode.J))
&&&&hero.transform.Translate(0.001f,0,0);&&
if(Input.GetKey (KeyCode.L))
&&&&hero.transform.Translate(-0.001f,0,0);&&
if (Input.GetKey (KeyCode.I))
hero.transform.Translate(0,0,-0.001f);&&
if(Input.GetKey (KeyCode.K))
hero.transform.Translate(0,0,0.001f);&&&&
DrawAnimation(anim); }& void&&DrawAnimation(Object[] tex) {&
//计算限制帧的时间
time += Time.deltaTime;
//超过限制帧切换贴图
if(time &= 1.0 / fps){
//帧序列切换&&&&&&
nowFram++;
//限制帧清空&&&&&&
//超过帧动画总数从第0帧开始&&&&&&
if(nowFram &= tex.Length)&&&&&&
nowFram = 0;&&&&&&
}&&&&&&&&}
//将对应的贴图赋予主角对象,强制将资源文件转换成贴图&&&&&&&&hero.renderer.material.mainTexture = (Texture)tex[nowFram];
代码中我们使用 Resources.LoadAll(“down”);来加载主角动画资源,这里将主角一组4帧的行走动画放在项目资源视图中 Resources文件夹中的down文件夹内。值得注意的是,使用Resources来加载资源就必须将资源放在Resources文件夹中,否则提示无法找到喔。在书中我以将人物四宫格行走动画加入在其中,因为这里只是一个是示例,所以我只加载了向下行走的4帧动画。我们看看资源在项目资源视图中的保存结构。
还有一个比较重要的地方就是要修改材质的shder类型,因为默认的材质是Diffuse,它是不支持透明的。如果材质不支持透明。主角的背景将会是白色。如下图所示,这里选择Transparent/Diffuse。保存为Transparent家族中的材质都是支持透明的。
最后2D游戏效果图映入我们眼帘了哦。按键W、S、A、D控制摄像机移动,按键J、K、I、L、控制主角移动。
总结一下这篇文章,本文我们在多个Plane对象身上贴上材质资源,再让摄像机直直的照射着它。实现2D游戏的基本原理,本文没有涉及到Unity3D的物理引擎,不要紧在下章中我将向大家介绍一下Unity3D中的刚体组件与角色控制器组件如何来实现模型的物理效果,包括物理引擎与3D或2D游戏的结合。另外大家一定要期待我的新书喔,哇咔咔~嘿嘿。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:Unity3D最新面试高频问答题目
最先执行的方法是:
1、(激活时的初始化代码)Awake,2、Start、3、Update【FixUpdate、LateUpdate】、4、(渲染模块)OnGUI、5、再向后,就是卸载模块(TearDown),这里主要有两个方法OnDisable与OnDestroy
高频问答的问题:
1.什么是渲染管道?
是指在显示器上为了显示出图像而经过的一系列必要操作。
渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。
主要步骤有:
本地坐标-&视图坐标-&背面裁剪-&光照-&裁剪-&投影-&视图变换-&光栅化。
2.如何优化内存?
有很多种方式,例如
A、压缩自带类库;
B、将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
C、释放AssetBundle占用的资源;AssetBundle资源包
D、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
E、使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
3.动态加载资源的方式?(有时候也问区别,具体请百度)
1.通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。Resources.Load();
2.通过bundle的形式:即将资源打成 asset bundle
放在服务器或本地磁盘,然后使用WWW模块get
下来,然后从这个bundle中load某个object。AssetBundle
3.通过AssetDatabase.loadasset
:这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的【AssetDatabase
资源数据库】
区别:Resources的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级(patch)是不利的,所以unity推荐的方式是不用它,都用bundle的方式替代,把资源达成几个小的bundle,用哪个就load哪个,这样还能分包发布和patch,但是在开发过程中,不可能没更新一个资源就打一次bundle,所以editor环境下可以使用AssetDatabase来模拟,这通常需要我们封装一个dynamic
resource的loader模块,在不同的环境下做不同实现。
动态资源的存放
&&有时我需要存放一些自己的文件在磁盘上,例如我想把几个bundle放在初始的安装里,
unity有一个streaming
asset的概念,用于提供存储接口的访问。我们需要在编辑器建立一个StreamingAssets名字的文件夹,把需要我们放在客户磁盘上的动态文件放在这个文件夹下面,这样安装后,这些文件会放在用户磁盘的指定位置,这个位置可以通过Application.streamingAssetsPath来得到。
4.什么是协同程序?
在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。
5.你用过哪些插件?
一 界面制作 推荐:NGUI
二 2D游戏制作 推荐:2D Toolkit&
&//[?tu:lk?t] 工具包,工具箱
三 可视化编程 推荐:PlayMaker
四 插值插件 推荐:iTween,HOTween
五 路径搜寻 推荐:Simple Path
六 美术及动画制作 推荐:RageSpline,Smooth
七 画面增强& &
推荐:Bitmap2Material,Strumpy Shader Editor
摄像机管理&&推荐:Security
资源包&&推荐:Nature Pack
十、造路插件EasyRoads3D
6.使用实现2d游戏,有几种方式?
1.使用本身的GUI;
2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;
//[??:θ?'ɡr?f?k] adj. 正字法的,拼字正确的;正射
3.使用2d插件,如:2DToolKit;
7.Unity3d中的碰撞器和触发器的区别?
触发器只是碰撞器身上的一个属性,碰撞器是触发器的载体。
碰撞器有碰撞的效果,IsTrigger=false,可以调用OnCollisionEnter/Stay/Exit函数;
{[k??l??n]n.
碰撞;冲突;(意见,看法)的抵触;(政党等的)倾轧}
触发器没有碰撞效果,IsTrigger=true,可以调用OnTriggerEnter/Stay/Exit函数。
a.如果不想让碰撞检测影响物体移动但是又想检测到碰撞这时用到触发器(Trigger)
b.触发器用来检测一个物件是否经过空间中的某个区域
8.物体发生碰撞的必要条件
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
.CharacterController和Rigidbody的区别?
CharacterController自带胶囊碰撞器,里面包含有刚体的属性;
Rigidbody就是刚体,使物体带有刚体的特征。
[CharacterController:角色控制器]
Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的Rigidbody,具有一定的物理效果但不是完全真实的
9.在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数
1.OnCollisionEnter(进入碰撞) 2.OnCollisionStay
(逗留碰撞) 3.OnCollisionExit(当退出碰撞)
10.Unity3d的物理引擎中,有几种施加力的方式,分别描述出来
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。
11.什么叫做链条关节?
Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。
{ [h?nd?] n. 铰链,折叶;关键,转折点;枢要,中枢}
12.物体自身旋转使用的函数?
Transform.Rotate()
13.物体围绕某点旋转使用的函数?
Transform.RotateAround()
14.Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数
PlayerPrefs.SetInt()
PlayerPrefs.GetInt()
15.Unity3d提供了几种光源类型,分别是哪几种?
平行光:Directional Light 点光源:Point
聚光灯:Spot Light 区域光源:Area Light
16.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。
Awake—&Start—&Update—&FixedUpdate—&LateUpdate—&OnGUI—&Reset—&OnDisable—&OnDestroy
17.物理更新一般放在哪个系统函数里?
FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。
18.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?
LateUpdate,在每帧执行完毕调用,它是在所有Update结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有Update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。
19.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?
使用预制物体对象Prefab,然后复制创建。
20.在场景中放置多个Camera并同时处于活动状态会发生什么?
游戏界面可以看到很多摄像机的混合。
21.请描述Prefab的作用,并描述如何在移动设备的环境下恰当的使用它?
Prefab在实例化的时候用到,主要用于经常会用到的物体,属性方便修改。
如何销毁一个UnityEngine.Object及其子类?
使用Destroy()方法;
22.请简述Unity3d下如何安全的在不同工程间迁移asset数据,请列举出三种方法?
1.可以把assets目录和Library目录一起迁移
3.用Unity带的assets Server功能
23.请描述游戏动画有哪几种,以及其原理?
主要有关节动画、骨骼动画、单一网格模型动画(关键帧动画)。
a.关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一
个整体的动画,角色比较灵活,Quake2中使用这种动画;
b.骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;
c.单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。
24.请描述为什么Unity3d中会发生在组件上出现数据丢失的情况
一般是组件上绑定的物体对象被删除了
25.alpha blend工作原理
Alpha Blend
实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。
{['?lf?] 透明(度); [blend] 混合;把…掺在一起}
26.写出光照计算中的diffuse的计算公式
计算公式为: Idiffuse = Dintensity*Dcolor*N.L ;
(Dintensity表示漫反射强度, Dcolor 表示漫反射光颜色, N 为该点的法向量, L 为光源向量
其中N与L点乘,如果结果小于等于0,则漫反射为0。){[d?'fju:z] vi.
传播;四散|intensity[?n'tens?t?] n. 强烈;(感情的)强烈程度;强度;烈度}
27.Lod是什么,优缺点是什么?
LOD(Level of
detail)多层次细节,是最常用的游戏优化技术。它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
28.两种阴影判断的方法、工作原理。
A.阴影由两部分组成:本影与半影
a.本影:景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)
b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)
求阴影区域的方法:做两次消隐过程
一次对每个光源进行消隐,求出对于光源而言不可见的区域L;
一次对视点的位置进行消隐,求出对于视点而言可见的面S;
shadow area= L ∩ S
B.阴影分为两种:自身阴影和投射阴影
自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面
工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。
投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域受不到光照照射而形成的阴影
工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)
若是动态光源此方法就无效了。
29.Vertex Shader是什么,怎么计算?
顶点着色器
顶点着色器是一段执行在GPU上的程序,用来取代fixed
pipeline中的transformation和lighting,Vertex Shader主要操作顶点。
Vertex Shader对输入顶点完成了从local space到homogeneous
space(齐次空间)的变换过程,homogeneous space即projection
space的下一个space。在这其间共有world transformation, view
transformation和projection transformation及lighting几个过程。
30.MipMap是什么,作用?
MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。
31.机试:二选一
1.用代码实现第三角色控制器
2.实现吊机吊物体的功能
【吊机吊物体需要节点挂接和坐标系转换】
32.反向旋转动画的方法是什么?
【反转动画,讲动画的速度调到-1,碰撞时,被碰撞物体与碰撞物体有collider组件,碰撞物体有刚体组件,或角色碰撞得包含角色组件
OR 改变animation.speed】
33.碰撞检测需要物体具备什么属性?
能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器
【Physics.Overlaphere相交球检测碰撞,碰撞检测需要包围盒】
34.获取、增加、删除组件的命令分别是什么?
获取:GetComponent
增加:AddComponent&&删除:Destroy
35.Animation.CrossFade命令作用是:(C)&&{Fadevi.
褪去,失去光泽;}
A.动画放大& &
& & B.动画转换&
C.动画的淡入为其他动画
36.Application.loadLevel命令为:(A)
A加载关卡& &
& & B.异步加载关卡&
C.加载动作
37.调试记录到控制台的命令是什么?
Debug.Log();
39.编辑器类存放路径是什么?
工程目录下的Assets/Editor文件夹下。
40.使用原生GUI创建一个可以拖动的窗口命令是什么?
GUI.DragWindow();
41.localPosition与Position的使用区别?
localPosition:自身位置,相对于父级的变换的位置。
Position:在世界坐标transform的位置
Mathf.Round& &
Mathf.Clamp& &
&&&四舍五入
Mathf.Lerp& &
42.写一个计时器工具,从整点开始计时,格式为:00:00:00
43.写出Animation的五个方法
AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample
44.怎么拿到一个对象上脚本的方法
GameObject.GetComponent&&();
上机题:用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个Cube即可)。
45.请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?
点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;
叉乘的几何意义是:创建垂直于平面,三角形,或者多边形的向量;
46..Unity3D是否支持写成多线程?如果支持的话要注意什么?
支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine.{
[k?ru:'ti:n] n. 协同程序}
注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象
47.Unity3D中的协程(Coroutine)和C#线程之间的区别是什么?
Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。
StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而LoadLevelAsync则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用loading条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜asynchronous[e??s??kr?n?s].synchronous同步
48.请简述四元数的作用以及四元数相对于欧拉角的优点
A.四元数一般定义如下:q=w+xi+yj+zk其中 w,x,y,z是实数。同时,有:
j*j=-1& & k*k=-1
B.四元数也可以表示为: q=[w,v]
有多种方式可表示旋转,如 axis/angle、欧拉角(Euler
angles)、矩阵(matrix)、四元组等。 相对于其它方法,四元组有其本身的优点:
a.四元数不会有欧拉角存在的 gimbal lock
问题[万向节死锁]
b.四元数由4个数组成,旋转矩阵需要9个数
c.两个四元数之间更容易插值
d.四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize)和正交化&
(orthogonalize),对四元数规范化更容易
e.与旋转矩阵类似,两个四元组相乘可表示两次旋转
49.请简述OnBecameVisible及OnBecameInvisible的发生时机,以及他们执行的意义?
当renderer(渲染器)在任何相机上都不可见时调用:OnBecameInvisible
当renderer(渲染器)在任何相机上可见时调用:OnBecameVisible
50.动画层(Animation Layers)的作用是什么?
动画层作为一个具有层级动画编辑概念的工具,可以用来制作和处理任何类型的动画
52.请说出4种面向对象的设计原则,并分别简述它们的含义。
1) 单一职责原则 (The Single Responsiblity
Principle,简称SRP):一个类,最好只做一件事,只有一个引起它的变化.
2) 开放-封闭原则 (The Open-Close
Principle,简称OCP):对于扩展是开放的,对于更改是封闭的
3) Liskov 替换原则(The Liskov Substitution
Principle,简称LSP):子类必须能够替换其基类
4) 依赖倒置原则(The Dependency Inversion
Pricinple,简称DIP):依赖于抽象
5) 接口隔离原则 (The Interface Segregation
Principle,简称ISP):使用多个小的专门的接口,而不要使用一个大的总接口。
53.Material和Physic Material区别?
PhysicMaterial
物理材质:物理材质描述,如何处理物体碰撞(摩擦,弹性)。
Material材质(材质类)为了获得一个对象使用的材质,可以使用
Renderer.materia属性:
54.法线贴图 、CG动画
A.法线贴图:是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。
B.CG动画:原为Computer
Graphics的英文缩写。随着以计算机为主要工具进行视觉设计和生产的一系列相关产业的形成,国际上习惯将利用计算机技术进行视觉设计和生产的领域通称为CG。它既包括技术也包括艺术,几乎囊括了当今电脑时代中所有的视觉艺术创作活动,如平面印刷品的设计、网页设计、三维动画、影视特效、多媒体技术、以计算机辅助设计为主的建筑设计及工业造型设计等。
NGUI(NUGUI1、NGUI2)
Button怎样接受用户点击并调用函数,具体方法名称是什么
a、直接监听事件
把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活。
56、请描述游戏动画有哪几种,以及其原理。
  主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。
a、关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活Quake2([kwe?k]vi.发抖,颤抖;)中使用了这种动画;b、
单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。
c、骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画
57、下面哪种做法可以打开Unity的Asset Store
Windows -& Asset Store
58、Mecanim系统中,Body Mask的作用是?
  指定身体的某一部分是否参与渲染
59、以下哪种操作步骤可以打开Unity编辑器的Lightmapping视图?
  Windows --& Lightmapping
60、关于光照贴图
  A:使用光照贴图比使用实时光源渲染要快 B:可以降低游戏内存消耗
C、多个物体可以使用同一张光照贴图
61、关于Vector3的API,以下说法正确的是?
  Vector3.forward与Vector3(0,0,1)是一样的意思;
62、 以下哪个函数在游戏进入新场景后会被马上调用?
  MonoBehaviour.OnLevelWasLoaded
63、 什么是导航网格( NavMesh)?
  一种用于实现自动寻路的网格
64、什么是局部坐标,什么是世界坐标?
  世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。
65、itween插件的作用是什么,itween作用于世界坐标还是局部坐标,请列举出3个其常用方法?
& iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等“
  方法:a、MoveTo&&物体移动
;b、ColorTo:随着时间改变对象的颜色组;
c、LookTo:随时间旋转物体让其脸部朝向所提供的Vector3或Transform位置
66、请简述NGUI中Panel和Anchor的作用
  Anchor包含UIAnchor脚本。UIAnchor的功能是把对象锚定在屏幕的边缘(左上,左中,左下,上,中,下,右上,右中,右下),或缩放物体使其匹配屏幕的尺寸
  Panel对象有UIPanel脚本,UIPanel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用。
67、Unity摄像机有几种工作方式,分别是什么?
68、LayerMask.NameToLayer()这个方法有什么作用?
  LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players")
返回该Layer的编号。
69、请描述MeshRender中material和shader的区别?
  Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)
  Shader大体上可以分为两类:表面着色器(Surface Shader)
、片段着色器(Fragment Shader)
70、什么是矢量图
矢量图:计算机中显示的图形一般可以分为两大类——矢量图和位图。矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真;最大的缺点是难以表现色彩层次丰富的逼真图像效果。
71、Unity 连接数据库
  需要得到Mono.Data.Sqlite.dll
文件与System.Data.dll文件
72、四元组是什么?
  所谓四元数,就是把4个实数组合起来的东西。4个元素中,一个是实部,其余3个是虚部。
转载自:/club/thread-.html
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 即将到来的场景时代 的文章

 

随机推荐