如何解决如何让跳跃流畅?
func _physics_process(delta):
direction = Vector3.ZERO
if !is_on_floor():
direction -= transform.basis.y
if Input.is_action_pressed("mf"):
direction -= transform.basis.z
elif Input.is_action_pressed("b"):
direction += transform.basis.z
if Input.is_action_pressed("JUMP") and is_on_floor():
direction += transform.basis.y
direction = move_and_slide(direction * 100,Vector3.UP)
direction = direction.normalized()
direction = move_and_slide(direction * speed,Vector3.UP)
这是我的动作。但是我的角色会传送到空中然后慢慢地倒下。如何让跳跃流畅?
解决方法
你总是需要重力。对我有用的是让运动体在跳跃代码之前下降。
extends KinematicBody
var speed=10
var gravity = 10;
var jump_speed = 10;
var vertical_velocity = Vector3.ZERO;
var direction=Vector3.ZERO
func _physics_process(delta):
# fall
vertical_velocity += gravity * delta * Vector3.DOWN;
vertical_velocity = move_and_slide(vertical_velocity,Vector3.UP)
# jump code
if is_on_floor() and Input.is_action_pressed("JUMP"):
vertical_velocity = jump_speed * Vector3.UP;
direction=Vector3.ZERO
if Input.is_action_pressed("mf"):
direction-=transform.basis.z
elif Input.is_action_pressed("b"):
direction+=transform.basis.z
direction = direction.normalized();
direction = move_and_slide(direction*speed,Vector3.UP)
请注意,上面的代码允许您在空中正常移动。不知道你愿不愿意。
这是一个可以在跳跃时保持方向,但不允许你在空中改变方向的版本:
extends KinematicBody
var speed=10
var gravity = 10;
var jump_speed = 10;
var vertical_velocity = Vector3.ZERO;
var direction=Vector3.ZERO
func _physics_process(delta):
vertical_velocity += gravity * delta * Vector3.DOWN;
vertical_velocity = move_and_slide(vertical_velocity,Vector3.UP)
if is_on_floor():
if Input.is_action_pressed("JUMP"):
vertical_velocity = jump_speed * Vector3.UP;
if Input.is_action_pressed("mf"):
direction-=transform.basis.z
elif Input.is_action_pressed("b"):
direction+=transform.basis.z
else:
direction=Vector3.ZERO
direction = direction.normalized();
direction = move_and_slide(direction*speed,Vector3.UP)/speed
请注意,此代码只会在 direction=Vector3.ZERO
时设置 is_on_floor()
,并且 no 没有方向输入。
这也意味着 speed
因子会累积,这就是我除以它的原因。
我们可以在此处引入因子:
direction = direction.normalized() * speed;
然后我们可以有这个:
direction = move_and_slide(direction,Vector3.UP)
此时名称 direction
不准确。因为它包含了速度。我会称它为 horizontal_velocity
或 ground_velocity
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。