You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Godot 2D中实现玩家下车时在车辆旁生成?

Godot 2D 实现下车时玩家在车辆旁生成

问题背景

我编写了一套Godot 2D车辆交互代码,参考3D教程中的下车位置计算代码var newLoc = vehicle.global_transform.origin - 2*vehicle.transform.basis.x时发现无法在2D环境中生效,请问如何在Godot 2D中实现玩家下车时在车辆旁生成的功能?

我的代码如下:

extends KinematicBody2D

var active = false
var car_zone = false

#car driving
func get_car_input():
    var velocity = Vector2.ZERO
    var speed = 200
    if Input.is_action_pressed("forward"):
        velocity.y = -1
    if Input.is_action_pressed("backward"):
        velocity.y = 1
    if Input.is_action_pressed("left"):
        velocity.x = -1
    if Input.is_action_pressed("right"):
        velocity.x = 1
    move_and_slide(velocity*speed)

func _physics_process(_delta):
    if active:
        get_car_input()
        leaving_car()
    if !active:
        entering_car()
        pass
    
#entering/exiting car
func _on_player_detect_body_entered(body):
    if body.name == "player":
        car_zone = true
func _on_player_detect_body_exited(body):
    if body.name == "player":
        car_zone = false
        
func entering_car():
    if Input.is_action_just_pressed("interact") && car_zone == true:
        var hidden_player = get_parent().get_node("player")
        hidden_player.active = false
        #$Camera.make_current()
        active = true
        print("car entered")
func leaving_car():
    var vehicle = $"."
    var hidden_player = get_parent().get_node("player")
    #spawn player to car HERE
    
    if car_zone == false && Input.is_action_just_pressed("interact"):
        hidden_player.active = true
        active = false
        #hidden_player.global_transform.origin = newLoc

解决方案

Godot 2D与3D的变换系统存在差异:3D中用transform.basis.x表示物体的局部X轴方向,而2D中直接通过global_transform.x即可获取全局空间下的物体局部X轴方向向量(已自动考虑旋转)。

实现代码修改

修改leaving_car函数,添加下车位置计算逻辑:

func leaving_car():
    var hidden_player = get_parent().get_node("player")
    
    if car_zone == false && Input.is_action_just_pressed("interact"):
        # 计算下车位置:车辆全局位置 减去 车辆局部X轴方向 * 偏移距离(2单位)
        # 此代码会让玩家生成在车辆的左侧(相对于车辆朝向)
        var newLoc = global_transform.origin - global_transform.x * 2
        
        hidden_player.global_transform.origin = newLoc
        hidden_player.active = true
        active = false
        print("car exited")

偏移方向调整说明

  • 如果希望玩家生成在车辆右侧:将- global_transform.x * 2改为+ global_transform.x * 2
  • 如果希望玩家生成在车辆后方(对应你代码中backward方向):使用+ global_transform.y * 2(因为Godot 2D默认Y轴向下,与你代码中的后退方向一致)
  • 可根据需求调整乘数(示例中的2)来改变偏移距离

内容的提问来源于stack exchange,提问作者dude_in_a_basement

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:40:28