第2期

1,如何实现磁铁效果?比如跑酷游戏中,获得磁铁道具后,自动吸附附近金币的效果。

  答:磁铁效果是模拟出来的,其实就是在磁铁靠近金币达到某个距离时做个判定,让金币自动朝其运动,达到磁铁效果。

     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不同在于触发之后会一直执行,而且可以获取当前状态。适合用在长时间持续动作,比如行走跑步。


4,两个对象发生碰撞的必要条件是什么?

  答:就是响应两个对象的回调函数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

如果勾选了Animator组件中的Apply Root Motion选项,角色的Transform将不能通过脚本来直接赋值,而是通过动画的运动的来改变的;如果我们不勾选,我们就可以用脚本改变角色的Tranform

9,Unity中如何实现序列帧动画?

答:序列帧动画,就是快速的变换动画帧,类似电影播放原理,就是控制其UV进行变化。

      步骤:准备好序列帧动画的素材,可以是单张也可以是图集(需要设置Multiple模式在Sprite Editor切割)。
然后使用Animation进行动画制作,制作好之后设置状态变化后可以直接在组件上直接使用;或给每张图片取好命名规范,在代码中使用Renderer组件进行循环更换也可以实现帧动画。
或者使用其他第三方插件也可以,但大同小异。


10,对象包含Box Collider 2D组件,且作为trigger使用时,检测是否有对象进入的函数是?
答:OnTriggerEnter2D(Collider2D other)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值