电子商务网站建设及推广方案论文,oa系统登录界面,wordpress系统邮箱设置,做化工资讯的网站文章首发及后续更新#xff1a;https://mwhls.top/4450.html#xff0c;无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评#xff0c;非常感谢#xff01; 汇总#xff1a;Unity 记录 摘要#xff1a;实现跳跃、蹬…文章首发及后续更新https://mwhls.top/4450.html无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评非常感谢 汇总Unity 记录 摘要实现跳跃、蹬墙跳与贴墙下落重写了项目。 参考课程超新Unity课程用UnityC#制作2D游戏快速入门到实战课程2D实战课程 目录 原型碰撞箱 2023/02/13 跳跃 – 2023/02/13 蹬墙跳与贴墙下落 – 2023/02/14 – 2023/02/15 项目重写 – 2023/02/15 原型碰撞箱 2023/02/13
碰撞箱有圆形的设置后左右移动会令物体旋转为刚体开启轴的旋转限制以解决。
跳跃 – 2023/02/13
教程里面是加一个脚底的圆形判定点来实现但是我的对象是圆的我希望它下半身碰到任何可接触物块时都能跳跃那这个圆形判断就不太好。 比如卡在缝里下半身肯定有接触才能卡但是因为圆形碰撞太小导致没判断接地太大的话腾空就能跳跃。今天改了几个小时的跳跃其中一个版本效果很好可以在被卡着的缝里跳出且不会在墙壁上起跳。 加三个碰撞体中间 middle 一个扁的长方体下方 lower 一个圆形最底 foot 一个窄一点的长方体。所有跳跃都需要lower触碰时才能起跳。middle有接触时表示碰到墙不允许起跳除非 foot 也有接触。使用圆形的 lower 避免太远就可起跳违和。但还有一个问题他可以卡在墙上不是跳跃的问题是摩擦力的问题。然后我把摩擦力关了发现能直接从缝里移动出来跳跃可以简略 所以我把我几个小时的成果删了把 foot 换成大约占 0.5 宽度的 edgeedge 由六个点组成刚好不会离碰撞体太远也不会因为速度太快导致撞墙可以跳跃。简化掉不必要的东西避免性能浪费。蹬墙跳与贴墙下落 – 2023/02/14 – 2023/02/15
实现中途发现脚本太多不好找于是对项目重写了介绍下最终效果。贴墙下落比较简单不多提。可以多段跳多段蹬墙跳在墙上只蹬墙跳在地上只跳跃。不按移动键时可以在墙上使用无水平速度的蹬墙跳可以在墙壁上获得最高跳跃不会因为水平速度离开墙壁。 换句话说算是个跨越高墙的小技巧。跳跃有冷却用协程实现涉及到下面更复杂的判定。
项目重写 – 2023/02/15
这次又重写了下第一次是把命名规范了下第二次也就是这次是把行为归类并且用了更复杂的判定。行为归类 之前是统一用 PlayerBase 来实现移动动画攻击。现在移动攻击动画是各自一个类。PlayerBase 只存储角色信息比如哪些技能可用剩余次数。更复杂的判定 现在所有运动都有新的判定可用、剩余次数、执行顺序。一点吐槽 这几天不务正业了就早上搞学术下午晚上都在搞 Unity明天要注意一下。但是第三集就是动画切换了看起来我能开始画动画了
// 分享一下重写后的跳跃public void action_jump(bool keydown_jump, float input_x){// condictionif (!keydown_jump) return;// jump wallelse if (check_jump_wall()){// actionjump_wall(input_x);// animation}// jumpif (check_jump()) {// actionjump();// animation}}
bool check_jump(){// skill enable?if (!player_base.enableSkill[jump]) return false;// touch ground?bool isGrounded check_touch(player_base.transform_dict[FootTouch].GetComponentlt;EdgeCollider2Dgt;());if (isGrounded) player_base.recoverSkill(jump, jump_wall);// times enough?if (!player_base.consume_skill_times(jump)) return false;return true;
}public void jump(){// cooldownIEnumerator coroutine player_base.reverse_skill(0.25f, jump_wall, jump);StartCoroutine(coroutine);// actionrb.velocity new Vector2(rb.velocity.x, speed_jump_final);
}bool check_jump_wall(){// skill enable?if (!player_base.enableSkill[jump_wall]) return false;// touch ground?bool isGrounded check_touch(player_base.transform_dict[FootTouch].GetComponentlt;EdgeCollider2Dgt;());if (isGrounded) {player_base.recoverSkill(jump, jump_wall);return false;}// touch wall?bool isStickWall check_touch(player_base.transform_dict[MiddleTouch].GetComponentlt;EdgeCollider2Dgt;());if (!isStickWall) return false;// times enough?if (!player_base.consume_skill_times(jump_wall)) return false;return true;
}public void jump_wall(float input_x){// cooldownIEnumerator coroutine player_base.reverse_skill(0.25f, move, jump_wall, jump);StartCoroutine(coroutine);// actionrb.velocity new Vector2(rb.velocity.x, speed_jump_wall_final);move(-input_x);
}/code/pre