Doris232 发表于 2022-5-9 09:26

unity之路第二天——跳跃优化和子弹伤害


2022.5.7 雨
今天做的并不多,能概括展开说说的只有跳跃手感的优化和子弹的伤害的实现。但有一些对前期的修改不会展开说,比如增加了子弹的射击和命中音效(之前只有命中音效),修改了角色跳跃的方法和逻辑等。
跳跃优化:

昨天实现了角色的移动,因为左右移动是用来虚拟轴,所以动起来也挺丝滑,但是跳跃手感就不敢恭维了,因为抛物线的原因,起跳和下落的时间是一样的。但是对于“跳跃”这个动作,玩家往往寄予更高的期待,期待落地感更强。表现之一便是落地的速度。



马里奥中起跳帧和下落帧的对比

从《马里奥》的案例中我们发现,下落速度一般会比起跳更快,具体的表现则在于:下落和起跳不共用一个加速度。
我们在update函数中写出跳跃检测的代码:
jumpPress = Input.GetButton("jump");
      if (jumpPress /*&& jumpCount > 0*/)//只在第一次按下跳跃时给一个向上的力
      {
         rb.velocity = Vector2.up * jumpForce;//起跳一瞬间给一个向上的初始速度,随着在空中的时间逐渐减少
      }
然后对是否持续按住跳跃键进行不同的决策:
if(rb.velocity.y > 0 && jumpPress)//起跳阶段
      {
            rb.velocity += Vector2.up*Physics2D.gravity.y*jumpAddition*Time.fixedDeltaTime;
            jumpCount = 0;
      }
      else if (rb.velocity.y < 0 && !jumpPress)//下落阶段
      {
            rb.velocity += Vector2.up*Physics2D.gravity.y*fallAddition*Time.fixedDeltaTime;
      }
我们可以看到起跳和下落分别乘了一个不同的系数,这个系数就决定了他们的加速度。也改变了不同阶段的速度。

子弹伤害:

其实这一步很简单。为了验证子弹的伤害,我特意新建了一个僵尸对象,然后初始化一定的血量。然后动态检测血量是否≤0,如果是,则销毁该对象。
关键在于,在子弹命中的碰撞检测处,要对碰撞的物体进行识别。我是用tag进行判断是否为Enemy,如果是,就调用改碰撞体的血量,让血量减一。
zombie z = collision.gameObject.GetComponent<zombie>();
z.health--;
这样就做到了,子弹碰撞到tag为Enemy的对象是,对他进行血量减一的操作,一旦敌人血量≤0,则销毁自身。

好了写完了,睡大觉zZZ
页: [1]
查看完整版本: unity之路第二天——跳跃优化和子弹伤害