今天整一个系列,完成移动的总结
包括:
左右移动,跳跃,二段跳
进一步尝试:
滑墙,冲刺,
首先是常规的移动和跳跃
void Update(){float x = Input.GetAxis("Horizontal");float y = Input.GetAxis("Vertical");Vector2 dir = new Vector2(x, y);move(dir);if (Input.GetKeyDown(KeyCode.Space)){jump();}}private void move(Vector2 dir){rb.velocity = (new Vector2(dir.x * speed, rb.velocity.y));}private void jump(){rb.velocity = new Vector2(rb.velocity.x, 0);rb.velocity += Vector2.up * jumpForce;}
然后,想要实现根据按键时间长短,来控制跳跃高度,查看了一个github案例,采用添加了一个跳跃优化脚本
void Update(){if (rb.velocity.y < 0){rb.velocity += Vector2.up * avity.y * (fallMultiplier - 1) * Time.deltaTime;}else if (rb.velocity.y > 0 && !Input.GetKeyDown(KeyCode.Space)){rb.velocity += Vector2.up * avity.y * (lowJumpMultiplier - 1) * Time.deltaTime;}}
当处于上升和下落的不同时候,分别给物体的y轴速度添加不同量的重力参数
然后这时候就会出现一个问题,当速度过大时,物体会陷入地面中,因为我为了分别做地面和墙体的碰撞,在小球的左右和下面各添加了一个boxCollider,可能是有由于碰撞体太小导致的,此时只需要将物体的rigidbody2d改为Continuous即可
然后又碰到了一个新的问题,如果一直按住跳跃键,就会一直上升,这tm是飞天键啊
我想了一个办法,控制跳跃的时间:
if (Input.GetButton("Jump")){jumpTime += Time.deltaTime;if (jumpTime <= 1){jump();}if (jumpTime > 1){jumpTime = 0;return;}}
然后发现,并没有什么用处
原来是归零的姿势不对,改成这样,就完美了
if (Input.GetButton("Jump")&& jumpTime <= 0.3f){jumpTime += Time.deltaTime;jump();}if(Input.GetButtonUp("Jump")){jumpTime = 0;}
接下来要完成的是多段跳功能,我的想法是,添加一个跳跃计数器,每当计数器次数大于0的时候,才可以跳跃,只有当检测到地面的时候,才恢复跳跃次数,于是这里就要开始做地面的碰撞检测;
private void OnCollisionEnter2D(Collision2D collision){if (llider.tag == "Ground"){jumpTime = 2;}}
然后接下来打算实现冲刺功能,简单来说就是,按下冲刺键,会进行一个冲刺,我的想法是,在小球按下方向键输入的方向上施加一个force
private void shift(Vector3 dir){rb.AddForce(dir*10, ForceMode2D.Impulse);}
这时候就出现一个问题,当一直按住方向键的时候,冲刺的力量会变得无穷大,要让冲刺的距离变成固定值
改进之后的版本:
private void shift(Vector3 dir){//rb.AddForce(new Vector3(100,0,0), ForceMode2D.Impulse);if(dir.x>0)rb.velocity = (new Vector2(50, rb.velocity.y));else if(dir.x < 0)rb.velocity = (new Vector2(-50, rb.velocity.y));}
然后是实现滑墙,我打算在碰撞体检测到墙体的时候,使他向下匀速运动
尝试了几次以后发现,物体只会向下滑动一段距离,而不会一直匀速下滑。
暂时无法解决这个问题
本文发布于:2024-01-31 12:35:57,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170667575828562.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |