Godot 4 3D 中的抓斗/摇摆系统

问题描述 投票:0回答:1

我对 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

知道如何改变它以允许摆动,还是我在这里走向完全错误的方向?

3d game-physics game-engine godot godot4
1个回答
0
投票

我会做一个有限状态机,其中一个状态是正常的平台游戏运动,一个状态是摆物理,就像 @cak3_lover 的评论中那样。

© www.soinside.com 2019 - 2024. All rights reserved.