答:磁铁效果是模拟出来的,其实就是在磁铁靠近金币达到某个距离时做个判定,让金币自动朝其运动,达到磁铁效果。
void OnTriggerStay(Collider other) //简言之,触发器+范围
{
if(other.tag == Tags.player )
{
GetComponent<Rigidbody>().MovePosition( Vector3.Lerp() );
if(dis < xxx)
Destroy(this.gameObject);
}
}
2,Unity中游戏暂停和开始怎么实现?
答: 游戏暂停和开始一般是通过Time.timeScale的数值控制的,1.0表示正常,0.0表示停帧,也就是暂停。
因为Time.timeScale影响的是Unity的游戏时间缩放比例。Unity里面所有跟时间有关系的东西都是根据timeScale来演算的。 仔细想想现在的手游就是个 动画 和 粒子技能特效 还有UI位移特效,所以改他们的速度直接用Time.timeScale就可以完成。还有一个重要的东西 就是人物移动或者技能移动的速度。
3,Animator Controller中参数类型bool和trigger的区别是什么?分别在何种情况下使用?
答:其实二者最大的区别是动作复原,settrigger设置动作后,它会自动复原,而bool是需要将再其设置成false,需手动操作。就是需要你自动控制的时候用trigger,手动的时候需要bool。
animator的trigger变量只能赋值,是一种触发变量,触发之后会自动关闭掉,没办法获取当前状态。
比如xxxx.animator.settrigger("Attack"); 在执行这一句时才是true ,但是执行后马上自动的变为false。适合用在单次动作或者连续不同动作使用,比如三国无双系列的攻击和蓄力攻击。
bool跟trigger不同在于触发之后会一直执行,而且可以获取当前状态。适合用在长时间持续动作,比如行走跑步。
答:就是响应两个对象的回调函数OnEnterTrigger。
无论碰撞的两个物体是利用碰撞器,还是利用触发器,都必须带有碰撞器组件Collider(Rigidbody2D),其中一个物体还必须带有Rigidbody(Rigidbody2D)刚体。人物控制器组件自身包含碰撞,另外一个物体带有Collider就可以发生碰撞。(简言之:两个物体都要有Collider组件,其中一个要有Rigidbody组件;或者一个有Collider组件,一个有CharacterController组件)
5,FPS游戏中,哪些东西适合使用对象池技术?
答:子弹可以使用对象池,还有特效可以使用对象池,敌人NPC和玩家NPC都可以使用对象池技术。
6,Lightmapping是什么?为什么要使用?
字面意思是光影地图,主要是针对静态物体的烘焙,就是将其阴影烘焙到地面的贴图上面。达到比较真实的效果,也可以降低渲染的消耗。(烘培贴图,实时灯光计算十分耗时,随着光源越多会倍增计算耗时。使用Lightmap模拟灯光带来的效果,便不用去计算灯光,会带来性能上的大大提升。)
7,在塔防游戏中,如何让塔指向进入攻击范围的敌人并射击?请简述程序流程。
答:首先判定根据与敌人的距离进行判定,到达一定距离的时候,让塔旋转到敌人的方向,并进行射击。
1)先判断NPC是否进入攻击范围(圆半径,距离,矩形,collider 触发器等)。
2)根据塔的种类进行不同处理:
单目标攻击:记录第一个进入范围的NPC,使用Lookat函数(transform.LookAt(enemy.transform))或者差值运算让塔面向目标,然后利用ITween播放子弹动画,目标为NPC,进行锁定射击。
范围群体目标攻击:记录所有在塔范围的NPC,存入List集合,每次攻击遍历集合并重复调用前面提到的单目标攻击的方法。
指向性飞行道具:用碰撞器或触发器,直接对NPC进行碰撞检测即可。
8,Unity中,控制3D人物模型位移方式有几种?Animator组件的Apply Root Motion的作用是?
答:多种,比如Transform,Slerp等
1.通过改变Transform组件的值位移
2.通过Transform.Translate
3.通过给刚体施加力位移
4.vector3.Lerp
5.通过CharacterController组件的Move
9,Unity中如何实现序列帧动画?
答:序列帧动画,就是快速的变换动画帧,类似电影播放原理,就是控制其UV进行变化。
步骤:准备好序列帧动画的素材,可以是单张也可以是图集(需要设置Multiple模式在Sprite Editor切割)。
然后使用Animation进行动画制作,制作好之后设置状态变化后可以直接在组件上直接使用;或给每张图片取好命名规范,在代码中使用Renderer组件进行循环更换也可以实现帧动画。
或者使用其他第三方插件也可以,但大同小异。
10,对象包含Box Collider 2D组件,且作为trigger使用时,检测是否有对象进入的函数是?
答:OnTriggerEnter2D(Collider2D other)