ue3dUnity中制作玩家墙壁跳跃

Unity中制作玩家墙壁跳跃

分类:

在 Unity 中制作让玩家跳跃碰到墙跳下来,如夹在俩面墙之间,则依托于另外一面墙,继续向上跳跃,直至遇到障碍物停止,该过程需要检测玩家何时撞到墙并使其能够跳跃。

ue3d - Unity中制作玩家墙壁跳跃

因此实现这一目标,则需要在播放器脚本中,创建了一些变量来配置跳墙的物理特性。

如下:

// 跳跃墙变量
[SerializeField]
private bool _canwallJump = false; // Bool检查玩家是否可以跳跃
private Vector3 _wallJumpDirection; // 墙壁的发现表面向量
private Vector3 _wallJumpBoost; // 矢量和速度相加
[SerializeField]
private float _wallJumpForce = 5.0f; // 墙跳力

然后使用 OnControllerColliderHit,因为需要检测玩家是否接地了?是否被碰到的物体?是否是墙壁?如果碰到该干嘛!

如果玩家在半空中接触到墙壁,且碰撞均为真,那么 _canWallJump 更改为 true,wallJumpBoots 为 0,其中 hit.normal 的 wallJumpDirection 是一个 Vector3,它指向玩家接触的墙的相反方向。

如下:

private void OnControllerColliderHit(ControllerColliderHit hit)
{
     if (_controller.isGrounded == false && hit.transform.tag =="wall')
     {
        Debug. DrawRay(hit.point, hit.normal, color.blue);
        _canwallJump = true;
        _wallJumpBoost = Vector3.zero;
        _wallJumpDirection = hit.normal;
     }
}
private void SetwallJumpPhysics(bool canwallJump, bool doubleJump, Vector3 wallJumpBoost, float speed)
{
     _canwalljump = canwallJump;
     _doubleJump = doubleJump;
     _wallJumpBoost = wallJumpBoost;
     _speed = speed;
}

因为玩家在地面上,因此在玩家接触到地面时的 Update 方法中,可以使用 SetWallJumpPhysics 函数设置默认值。

然后当玩家没有接地并按下空格键时,将检查 canWallJump 是否为真。

在这种情况下,将 canWallJump 和 DoubleJump 设置为 false 以使玩家无法再次跳跃,wallJumpBoost 将是 wallJumpDirection 乘以 wallJumpForce 最后将玩家速度设置为 1 以使玩家无法水平移动跳墙。

之后,只需将 wallJumpBoost 添加到玩家速度并使用 Move 函数来移动玩家。

如下:

void Update()
{
     // 水平运动
     float h = Input.GetAxis("Horizontal");

     Vector3 direction = new Vector3(h,0,0);
     Vector3 velocity = direction * _speed;

     if (_controller.isGrounded)
     {
        SetwallJumpPhysics(false,true,Vector3.zero,DEFAULT_SPEED);

        // .. 更多与跳跃墙无关的代码
     } else
     {
        if ( Input.GetKeyDown(KeyCode.Space))
        {
           if (_canwallJump == true)
           {
              _yVelocity = _jumpHeight;
              SetwallJumpPhysics(false,false,_wallJumpDirection * _wallJumpForce,1.0f);
           }
           else if (_doubleJump == true)
           {
               // 更多与跳跃墙无关的代码
           }
       }else
       {
          // 更多与跳跃墙无关的代码
       }
   }
   velocity.y = _yVelocity;
   velocity += _wallJumpBoost;

   _controller.Move(velocity * Time.deltaTime);

// 更多与跳跃墙无关的代码
}

到这里, 现在就可以在场景中操纵玩家实现具有物理属性的跳跃动画了。

ue3d - Unity中制作玩家墙壁跳跃

相关信息

  • 类型:知识
  • 字数:438
  • 字符:2721
  • 适用软件:Unity
  • 说明:无
  • 编号:93069

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!