我对 Godot 相当陌生,但对 Unity 和 Python 有一点经验。我的目标是拥有一个像卡尔森游戏中使用的擒抱系统,你可以向后和第四/左右摆动,但仍然施加重力/动量。我花了相当多的时间尝试不同的事情 - 我首先遵循 Garbaj 的拉式擒抱系统教程,然后开始浏览不同的教程、Godot 文档,并自己尝试一些东西。起初我认为使用 Pinjoint 会起作用,但似乎您无法在代码中更改连接节点值。所以现在我认为解决方案可能是将光线投射锁定到玩家左键单击(“射击”)时发生碰撞的位置,然后以某种方式根据玩家位置和光线投射碰撞位置计算摆动,但我有不知道如何去做。
这是我当前的代码,现在它只是将我拉向碰撞点。 变量:
@onready var ray_cast_3d = $RayCast3D
@onready var camera_3d = $Neck/Head/Camera3D
@onready var grapplecast = $Neck/Head/grapplecast
var grappling = false
var grapple_point = Vector3.ZERO
var grapple_point_get = false
抓斗功能
func grapple(delta):
if Input.is_action_pressed("shoot"):
if grapplecast.is_colliding():
if not grappling:
grappling = true
else:
grappling = false
if grappling:
if not grapple_point_get:
grapple_point = grapplecast.get_collision_point()
grapple_point_get = true
if grapple_point.distance_to(transform.origin) > 1:
if grapple_point_get:
transform.origin = lerp(transform.origin, grapple_point, delta * 1.5)
else:
grappling = false
grapple_point_get = false
if Input.is_action_just_released("shoot"):
velocity.y += 5
知道如何改变它以允许摆动,还是我在这里走向完全错误的方向?
我会做一个有限状态机,其中一个状态是正常的平台游戏运动,一个状态是摆物理,就像 @cak3_lover 的评论中那样。