如何在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
相关产品推荐
相关产品推荐

