经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » unity » 查看文章
Unity进阶提升-2D游戏跳跃手感优化(跳起下落)
来源:cnblogs  作者:清风扶云雾  时间:2023/10/30 9:20:43  对本文有异议

在进行2D游戏开发时,跳跃是不可缺少的一个重要功能。但是我们在Unity开发时Unity本身的物理引擎并不能提供很好的的手感,下落的时候轻飘飘的,这操作起来显然非常不舒服。所以,我们需要自己对跳跃进行优化,以此来获得更好的手感。我们不难发现,在绝大多数2D游戏的跳跃中,下落的速度比上升的速度要快上很多,下落的用时是上升的一半左右。

提示,在优化跳跃时,将使用刚体组件

首先,我们需要对Unity物体跳跃阶段进行分析:

图中,跳跃共分为两个阶段,第一阶段就是跳起,人物上升阶段,第二阶段就是下落阶段

在第一阶段中,刚体向上速度为正,即velocity.y>0;第二阶段下落,物体的velocity.y<0,所以我们可以通过velocity.y的正负来确定物体所处哪一个阶段,进而对物体可以有更精确的操作。

接下来,我们就要对物体跳跃阶段进行操作,首先我们需要判定物体受否在面上,并且按下了W或其它跳跃按键,触发跳跃后,我们给物体的velocity.y赋一个初始值V,代表初始速度,那么最终跳跃高度的变化为h=Vt-1/2gt2(g为重力加速度,t为时间),物体速度velocity.y=V-gt,当velocity.y=0时,物体到达最高点,此时物体高度(最高点)H=(V2)/(2g)。

接下来,物体仍然受到重力加速度的作用,物体速度velocity.y的值继续减小,变为了负值,而这也标志着物体开始下落。从图中可以看出当物体只具有一个向上的初速度并且只受重力时,它的上升时间和下落时间是一样的,T=V/g。所以,我们为了确保下落用时是上升的一半,所以我们需要改变物体的重力加速度,使它变为原来的二倍,即修改Physics2D.gravity的值,使它的y的值乘2。

这样我们就完成了一个跳跃的优化。代码如下:

  1. //提示!本代码使用射线检测物体是否位于地面
  2. //提示!各变量含义
  3. //rb 刚体组件
  4. //jumpSpeed 跳跃初始速度
  5. //fullSpeed 下落重力加速度倍数
  6. //isGround 玩家是否在地面
  7. //rayDistance 射线距离
  8. //groundLayerMask 地面的图层
  9. void Update()
  10. {
  11. Ground();
  12. if (Input.GetKeyDown(KeyCode.W) && isGround)
  13. {
  14. Jump();
  15. }
  16. if (rb.velocity.y <= 0)
  17. {
  18. Full();
  19. }
  20. }
  21. private void Jump()
  22. {
  23. rb.velocity = Vector2.up * jumpSpeed;
  24. }
  25. private void Full()
  26. {
  27. //重力加速度变为fullSpeed倍
  28. Physics2D.gravity = new Vector2(0, -9.8f * fullSpeed);
  29. }
  30. //射线检测,是否在地面
  31. private void Ground()
  32. {
  33. // 从物体下方投射一条射线,看它是否与地面碰撞
  34. RaycastHit2D hit=
  35. Physics2D.Raycast(transform.position,Vector2.down,rayDistance,groundLayerMask);
  36. if (hit.collider != null)
  37. {
  38. isGround = true;
  39. }
  40. else
  41. {
  42. isGround = false;
  43. }
  44. }

原文链接:https://www.cnblogs.com/CloudAndMist/p/17794105.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号