如果箱子KinematicBody不加脚本并且也不想用上面我说的move_and_slide(Vector2.ZERO)
下面是player的脚本
extends KinematicBody2D
const SPEED = 300.0
var velocity = Vector2.ZERO
func _physics_process(delta: float) -> void:
velocity.y += 10
var dir := Input.get_axis("ui_left", "ui_right")
if dir:
velocity.x = dir * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity = move_and_slide(velocity,Vector2(0,1))
for i in get_slide_count():
var collision := get_slide_collision(i)
if not is_instance_valid(collision):
continue
if collision.collider.name == "Box":
#计算碰撞点,然后计算碰撞点跟玩家中心的碰撞方向向量,最后对碰撞方向向量在x轴正向投影得到箱子应该挤开的方向
var collision_pos = collision.position
var collision_direction = global_position.direction_to(collision_pos)
var direction = collision_direction.project(Vector2(1,0)).normalized()
collision.collider.move_and_slide(direction * 70)
prints(collision, collision.collider)
prints(collision_pos,collision_direction,direction)
