以下哪个回调函数的应用场景在游戏进入新场景后会被马上调用

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
接上文&本文内容:讨论基本的追逐和闪躲技术,以及进级的拦截技术。我们也谈及这些技术在砖块环境和连续环境中的变化。追逐和闪躲本章的焦点是追逐和闪躲,这是一个十分常见的问题。无论你开发的是太空战机射击游戏,策略模拟游戏,还是角色扮演游戏,游戏中的非玩家角色都会试着追逐或者逃离玩家角色。追逐和闪躲由以下三部分组成:追或逃的决策判断(后文谈论到状态机和神经网络时再来讨论)开始追或逃(本章重点)避开障碍物(第五章和第六章会再谈这个问题)让追击者追逐猎物是最简单、最容易写而且也是最常用的方法就是在每次的游戏循环中,更新追击者的坐标,让追击者和猎物的坐标离得愈来愈近。这种算法不去管追击者和猎物各自行进的方向和速度。虽然这种做法有直接的效果,追击者会不断往猎物的位置移动,除非被障碍物挡住,但是,这种做法有其限制,稍后再加以讨论。除了这种最简单的方法之外,还有其他方法可以用,审视你的游戏所需的条件。例如,游戏中如果整合了实时物理引擎,你就可以采用一定方法,考虑追击者及猎物的位置及速度,让追击者试着拦截猎物,而不是傻乎乎地一直追下去。在这种情况下,相对位置和速度的信息,可以作为某种算法的输入数据,由该算法求出适当的驱动力(如推力),把追击者引向猎物。不过,另外一种方法是利用势函数,以某种方式改变追击者的行为,使其去追逐猎物,或者更明确地讲是让猎物引起追击者的注意。同样,也可以用类似的势函数,让猎物逃离追击者,或者让追击者对猎物产生排斥感。第五章将介绍势函数。本章我们要探索几个追逐和闪躲的方法,从最基本的方法开始。在此我们将追逐和闪躲分为在连续环境中和砖块环境中。砖块游戏中,游戏区会被分成不连续的砖块,而玩家位置会固定在某个砖块上。移动时都是以砖块为单位并且玩家前进的方向被限制(因为可能你的前方被砖块阻挡)。在连续环境中,则是以点坐标表示游戏区中的位置,玩家也可以往任何方向移动。连续环境中的基本的追逐和闪躲最简单的追逐算法就是根据猎物的坐标来修改追击者的坐标,使两者间的距离逐渐缩短。将此方法反着用则不再是缩短追击者和猎物间的距离,而是扩大该距离,则是闪躲方法。基本追逐代码如下:// 例2-1:基本追逐算法:根据猎物的坐标来修改追击者的坐标
if(predatorX & preyX)
predatorX--;
else if(predatorX & preyX)
predatorX++;
if(predatorY & preyY)
predatorY--;
else if(predatorY & preyY)
predatorY++;猎物的坐标是preyX,preyY,而追击者的坐标是predatorX ,predatorY&。游戏循环每运行一轮时就比较两者的x,y坐标。若追击者的x坐标大于猎物的x坐标,则递减追击者的x坐标,但如果追击者的x坐标小于猎物的x坐标,则递增追击者的x坐标。y坐标的调整逻辑也一样。最后的结果就是,每当游戏循环运行一轮后,追击者就会越接近猎物。运用相同的方法,颠倒一下判断逻辑后,就可以实现基本闪躲效果。代码如下:// 例2-2:基本闪躲算法:根据追击者的坐标来修改猎物的坐标
if(preyX& predatorX)
else if(preyX& predatorX)
if(preyY& predatorY)
else if(preyY& predatorY)
preyY--;砖块环境中的基本的追逐和闪躲无论是砖块环境还是连续环境,例2-1与例2-2所示范的技巧都适用。只不过在砖块环境中,x,y的坐标就是砖格的行、列编号,也就是说x,y坐标都是整数。而在连续环境中,x,y的坐标可以是实数,构成游戏区域的笛卡尔坐标。下面是砖块环境中的追逐实例:// 例2-3:砖块环境中的基本追逐实例
if(predatorCol & preyCol)
predatorCol--;
else if(predatorCol & preyCol)
predatorCol++;
if(predatorRow & preyRow)
predatorRow--;
else if(predatorRow & preyRow)
predatorRow++;下图时怪物追赶主角时所走的路径:可以看出,怪物在基本追逐中会沿着对角线走向主角,直到XY坐标之一和主角相等(此例中是X坐标)。接着,怪物沿着另外一个坐标轴继续往主角方向向前,此例中为Y轴。可以看到,这种追逐显得很不自然也很不智能,比较好的做法是让怪物走直线去追赶主角(引出视线追逐)。后面我们会提到。砖块环境中的闪躲实例:// 例2-4:砖块环境中的基本闪躲实例
if(preyCol& predatorCol)
preyCol++;
else if(preyCol& predatorCol)
preyCol--;
if(preyRow& predatorRow)
preyRow++;
else if(preyRow& predatorRow)
preyRow--;视线追逐视线追逐又称为视线法,视线法主要是让追击者沿着猎物的直线方向前进,即让追击者永远面对着猎物当时位置前进。当猎物站着不动时,追击者所走的路径是直的,但是当猎物移动时,路径就不一定是直线了,可能是弯弯曲曲的。如下图所示。在上图中,圆圈代表追击者,方块代表猎物。虚线图形指的是起点和中途的位置。在左边的场景中,猎物是不动的,因此追击者可以直线追击猎物。在右边的场景中,猎物不停的移动,追击者的方向也随之改变。游戏循环每运行一轮或经过一段时间,就必须重新计算追击者朝向猎物的新方向。砖块环境中的视线追逐观察上图可以发现,虽然基本追逐和视线追逐的路径距离是相等的,但是视线法看起来更自然、直接,看起来怪物更具有智能。所以,视线法的目标就是算出一条路径,让怪物看起来像是沿着直线走向玩家。解决这个问题的方法是使用直线扫描转换(标准线段算法),这种算法通常是在图素环境中画线段。前面我在&中介绍过几种直线扫描算法。这里我们采用 Bresenham 算法。计算巨人移动方向的 Bresenham 算法,会以起点(怪物位置的行和列)和终点(玩家位置的行和列)为数据,算出巨人要走的一连串步伐,使其能以直线走向玩家。每次怪物的猎物(此例是玩家)改变位置时,都要调用一次这个函数。一旦猎物移动了,前一次算出来的路径就无效了,必须再重新计算一次。例2-5到例2-8示范了如何使用 Bresenham 算法建立怪物走向目标的路径。例2-5:BuildPathToTarget()函数
void ai_Entity::BuildPathToTarget(void)
int nextCol=
int nextRow=
int deltaRow=endRow-
int deltaCol=endCol-
int stepCol,stepR
int currentStep,
}这个函数使用了 ai_Entity 类中存储的值,建立路径的起点和终点。col 和 row 的值是路径的起点位置即怪物当前的位置。endRow 和 endCol 是路径的终点坐标,也就是猎物的位置。该函数先将怪物当前的位置 col 和 row 赋给了 nextCol 和 nextRow 并计算出行方向上的增量 deltaRow 和 列上的增量 deltaCol 留待后面为 Bresenham 算法提供方便。然后声明了 行方向上的步伐 stepCol,列方向上的步伐stepRow,当前步伐的计数器 currentStep。例2-6:路径初始设定
for(currentStep=0;currentStep&kMaxPathLcurrentStep++)
pathRow[currentStep]=-1;
pathCol[currentStep]=-1;
currentStep=0;
pathRowTarget=endR
pathColTarget=endC在例2-6中可以看到,行和列的路径数组已初始化。每次猎物的位置改变后,这个函数就会被调用,所以在计算新值时必须把旧路径清除掉。例2-7利用先前算出了 deltaRow 和 deltaCol 决定路径的方向。//例2-7:路径方向计算
if(deltaRow&0)
stepRow=-1;
stepRow=1;
if(deltaCol&0)
stepCol=-1;
stepCol=1;
deltaRow=abs(deltaRow*2);
deltaCol=abs(deltaCol*2);
pathRow[currentStep]=nextR
pathCol[currentStep]=nextC
currentStep++;下面是利用 Bresenham 算法计算怪物所走的路径。例2-8:Bresenham 算法计算怪物所走的路径
if(deltaCol&deltaRow)
fraction=deltaRow*2-deltaC
while(nextCol!=endCol)
if(fraction&0)
nextRow=nextRow+stepR
fraction=fraction-deltaC
nextCol=nextCol+stepC
fraction=fraction+deltaR
pathRow[currentStep]=nextR
pathCol[currentStep]=nextC
fraction=deltaCol*2-deltaR
while(nextRow!=endRow)
if(fraction&=0)
nextCol=nextCol+stepC
fraction=fraction-deltaR
nextRow=nextRow+stepR
fraction=fraction+deltaC
pathRow[currentStep]=nextR
pathCol[currentStep]=nextC
}在上面的函数中,我们计算每一点与终点之间的横轴与纵轴。然后比较两轴的长度,哪一个轴比较长,就往该方向前进,如果两轴等长,则往斜边前进。所以,一开始的 if 条件语句便以 deltaCol 和 deltaRow 的值来判断哪个轴更长。如果列轴更长,则执行 if 语句后的程序代码。如果行周更长,则执行 else 之后的程序代码。然后,这个算法将沿着较长的轴去走,算出沿着线段上的每一个点。连续环境中的视线追逐在连续环境中的视线算法,主要在于控制追击者转向力的启动时机与反向,使其随时保持着面向猎物的姿态。算法思路:计算追击者自己和猎物之间的相对位置并凭借调整转向力的大小来保持追击者自身一直面对猎物的方向,然后向猎物追过去。全局坐标系统和局部坐标系统:下面例2-9所示的函数,会计算追击者自己和猎物之间的相对位置并凭借调整转向力的大小来保持追击者自身一直面对猎物的方向。这段函数会在每次物理引擎循环运行一轮时,就被重新执行一次。只有这样才能达到视线追击的效果。例2-9:视线追逐函数
void DoLineOfSightChase(void)
Vector u,v;
// u追逐者向量,v猎物向量
bool left = false;
// 是否需要向左转
bool right = false; // 是否需要向右转
u = VRotate2D(-Predator.fOrientation,
(Prey.vPosition-Predator.vPosition)); // 视线在局部坐标系中的向量
u.Normalize();
// 将得到的向量u标准化
if(u.x & -_TOL)
// 判断转动的方向
left = true;
else if(u.x & _TOL)
right = true;
Predator.SetThrusters(left, right); // 转动
}例2-9的算法十分简单。一开始就定义了四个局部变量。u 和 v 是追击者与猎物的向量,它们所属的 Vector 类,是我们定义的类,该类提供了所有基本的向量运算,诸如向量加法、减法、内积、外积以及其他运算。另外另个局部变量 left 和 right 是一组布尔变量。它们代表该方向上的转向力是否有作用,在直线前进情况下。这两个变量的初始值都赋以 false。在局部变量的定义之后,首先要计算追击者到猎物之间的视线:u = VRotate2D(-Predator.fOrientation,
(Prey.vPosition-Predator.vPosition));其中的(Prey.vPosition-Predator.vPosition)&是以追击者与猎物的全局坐标计算两者之间的相对位置向量,而 VRotate2D( ) 函数将此向量转换成追击者的局部坐标。 VRotate2D( ) 函数需要两个参数,一个是局部坐标系统的基准点,另一个是全局坐标系统中的向量,它能将该向量转换成相对于局部坐标基准点的向量。接着,我们使用 Normalize() 将得到的向量 u 标准化即转换成一个单位长度的向量。有了从追击者指向猎物的单位向量 u,即可据此判断猎物是在追击者的左边、右边还是正前方并据此调整方向。从追击者的局部坐标系来看,如果猎物的 x 坐标是负值,那么猎物位于追击者的右边,因此应该启动左边的转向力,调整追击者的前进方向。同理,如果猎物的 x 坐标值是正的,则位于追击者的左边,应该启动右边的转向力,调整追击者的方向。如果猎物的 x 坐标是0,则无需启动两侧的推进器,直接前进即可。这个算法的结果如下图所示。下图显示的是追击者和猎物行走的路径。刚开始的时候,追击者位于画面的左下角而猎物位于右下角。猎物随时间往左上角直线移动。追击者的路径则是弯曲的,因为它会不断调整自己的方向保持朝着移动中的猎物前进。拦截之前讨论的连续环境中的视线追逐算法,可以有效地使追击者一直朝着猎物方向前进。但是,这种算法的缺点是直接朝着猎物方向前进,从空间或者时间的角度来看,不一定都是追上猎物的最短路径。比较合理的解决方法,是让追击者在猎物路径上的某个点予以拦截。这样从时空角度来看,可以让追击者以最短的时间或路径追到猎物。拦截算法的基本原理:预测猎物未来的位置,然后直接到那个位置去,使追击者能和猎物同时到达统一位置。如下图所示。追击者要做的第一步计算是求它自己和猎物间的相对速度。我们称为靠拢速度,就是猎物和追击者间的速度向量差:&第二步是要计算靠拢距离,也就是追击者和猎物间的相对距离,相当于两者当前位置的向量差:&接下来要计算靠拢时间,靠拢时间是以靠拢速率(追击者和猎物之间的相对移动速度)走完靠拢距离所需的平均时间:&例2-10:拦截函数
void DoIntercept(void)
Vector u,v;
Bool left=false;
Bool right=false;
Vector Vr,Sr,St; //新增
Vr=Prey.vVelocity-Predator.vV
Sr=Prey.vPosition-Predator.vP
tc=Sr.Magnitude();
St=Prey.vPosition + (Prey.vVelocity * tc);
//将Prey.vPosition 改成了St
u=VRotate2D(-Predator.fOrientation,(St-Predator.vPositon));
//其余部分和视线追逐法的函数一样
u.Normalize();
if(u.x & -_TOL) // 判断转动的方向
left = true;
else if(u.x & _TOL)
right = true;
Predator.SetThrusters(left, right); // 转动
}从例2-10中的程序注释,可以看出视线追逐函数与拦截函数之间的差别,仅仅在于目标点的改变。前者是以猎物本身为目标,后者是以猎物的未来未知为目标。所以新增的程序代码,基本上只是运用公式从靠拢速度、距离以及靠拢时间,计算出猎物的预测位置。每当游戏循环或物理引擎运行一轮,都应该重新调用此函数,随时修正拦截点及拦截路径。例子:图2-11所示的场景是追击者和猎物,分别从画面的左下角和右下角出发。猎物以匀速走向左上方。同时,追击者计算出预测的拦截点并朝该点走去,同时持续更新预测的拦截点及其行进方向。图中的拦截点以一连串的点表示,分布在猎物的前方。最初,拦截点会随着追击者转向猎物而改变,然而由于猎物以匀速转动,方向确定后,拦截点就固定了。过了一段时间后,追击者拦截住猎物,如图2-12所示。连续环境中追逐和闪躲 示例代码下载在VC 6++ 环境下可运行。可以在Opention 菜单中选择追逐的方式(基本追逐,基本闪躲,视线追逐,潜在的追逐)或者选择是否显示向量和线条。代码:AIDemo2-2
阅读(106)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'游戏开发中的人工智能(二):追逐和闪躲',
blogAbstract:'转:http://blog.csdn.net/jurbo/article/details/#comments接上文&',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}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是实数。同时,有:&i*i=-1&&&&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、直接监听事件
把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活。
[code]csharpcode:
void&OnClick()
  Debug.Log("Button
is Click!!!");
b、SendMessage
选择Button-Component-NGUI-Interaction-Button Message//[ˌɪntər'&kʃn]n.&一起活动;合作;互相影响;互动
c、UIListener(推荐)
选择Button-Component-NGUI-Internal-Event Listener
调用方法:
[code]csharpcode:
using&UnityE
using&System.C
public&class&BtnNUGUI
: MonoBehaviour {
&&&&void&Awake()
&&&&&&&&GameObject
button = GameObject.Find("UI
Root (2D)/Camera/Anchor/Panel/Button");
&&&&&&&&UIEventListener.Get(button).onClick
&&&&void&ButtonClick(GameObject
&&&&&&&&Debug.Log("NGUI
button name :"+button.name);
Use this for initialization
&&&&void&Start
Update is called once per frame
&&&&void&Update
&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个是虚部。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 java回调函数使用场景 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信