Unity入门第二天:移动,碰撞与渲染

本篇讲述了物体的碰撞体积,与地图优先级的渲染。

添加碰撞体积

为了实现坦克大战中地图设计,我们要在地形(墙,河流)上添加碰撞体积(Box Collider),并要在坦克上添加刚体(Rigidbody)。

因为坦克大战是一款平面游戏,切记要倒入2D文件,如Box Collider 2D, Rigidbody 2D

Rigidbody组件可以让一个物体受到物理影响。比如添加Rigidbody组建后,物体会立马对重力作出反应。如果物体上还添加了Collider,物体在受到碰撞时也会移动。之所以在坦克身上添加刚体是因为玩家会一直操控坦克,所以刚体便不会休眠,而一直保持活跃状态。

然而测试时我们发现坦克在我们没有控制的情况下会一直向下坠落,原因是初始设定中设置了重力的参数,将Gravity Scale设置为零就好了。

限制物体移动

  • 在第一天的学习中我们实现了坦克的移动,但在实际测试中我们发现坦克会因为碰撞到地形的边缘而使方向变得扭曲,并不是理想中的纯上下左右式。解决方法为点击Rigidbody 2D —> constraints(限制条件) -> Freeze Rotation将Z轴锁住。
  • 第二个问题是将坦克向墙壁开去时,坦克并不会在靠近墙壁处停止运动,而是进行抽插式的诡异抖动。我们将原来在Update()中控制坦克运动的代码装入FixedUpdate()中,抖动是因为触发器判定时间每个人设备不同,如果用了fixedupdate就让他进行均匀的判定,解决抖动。相对应地,也应该将Time.deltaTime改为Time.fixedDeltaTime
  • 对于喜欢同时按两个方向键移动的玩家(我), 设置上下左右的优先级便可以限制玩家的操作。如当玩家同时按下上、右两个键时,若设定横向移动的优先级比纵向移动的更高,那玩家只能向右走。实现代码如下:
    1
    2
    3
    4
    5
    //如果玩家在水平方向和垂直方向都有输入,则设置水平方向优先级最高
    //如果水平方向有输入,就直接return不用去管垂直方向
    if (h != 0){
    return;
    }

2D场景渲染

为实现坦克进入草丛后草丛应该在坦克上方,子弹飞过河流时子弹在河流的上方,我们要设置2D场景渲染的优先级:

  • Sorting layer是大层级
  • 控制大层级下面渲染的顺序:Order in layer 层级越大,越后渲染,即会覆盖其他层级数字小的物体。

#明天更新子弹的发射和移动!(其实已经学到子弹的发射了,但方向设计欧拉角和四元数,觉得应该学清楚再写)

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2020-2024 Yangyang Cui

请我喝杯咖啡吧~

支付宝
微信