1 小怪软碰撞

新建一个Area2D节点softCollsion,挂载脚本soft_collsion.gd,添加碰撞形状

脚本逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
extends Area2D

func is_colliding():

#1.判断是否重叠区域
var areas = get_overlapping_areas()
return areas.size() > 0

func get_push_vector():

#定义重叠区域 和 软碰撞移动方向
var areas = get_overlapping_areas()
var push_vector=Vector2.ZERO

#如果重叠
if is_colliding():
var area = areas[0]

#移动方向
push_vector =area.global_position.direction_to(global_position)
push_vector = push_vector.normalized()
return push_vector

2 Bat使用软碰撞

1
2
3
4
5
6
7
8
@onready var soft_collsion: Area2D = $softCollsion

......

if soft_collsion.is_colliding():
velocity += soft_collsion.get_push_vector() * delta * 400

......