这是我的代码部分
extends Node2D
# 预加载并获取 Marker2D 组件(IK 目标点)
@OnReady var right_hand_2: Marker2D = $Node2D/right_hand2 # 右手目标点
@onready var left_leg_2: Marker2D = $Node2D/left_leg2 # 左腿目标点
@onready var left_hand_2: Marker2D = $Node2D/left_hand2 # 左手目标点
@onready var right_leg_2: Marker2D = $Node2D/right_leg2 # 右腿目标点
@onready var skeleton: Skeleton2D = $"." # 获取当前节点的 Skeleton2D
@onready var animation_tree: AnimationTree = $"../../AnimationTree"
var modification_stack
func _process(delta: float) -> void:
var modification_stack = skeleton.get_modification_stack()
modification_stack.setup()
func _ready():
var modification_stack = skeleton.get_modification_stack()
# 获取当前实例的唯一 ID
var instance_id = str(get_instance_id())
#print("实例 ID: ", instance_id)
# 打印检查 Marker2D 是否正确唯一化
_print_marker_names()
_update_ik_targets()
func _update_ik_targets():
var modification_stack = skeleton.get_modification_stack()
if modification_stack:
for i in range(modification_stack.get_modification_count()): # 遍历所有修改器
var mod = modification_stack.get_modification(i) # 获取第 i 个修改器
if mod is SkeletonModification2DTwoBoneIK:
var bone_name:String = mod.get_joint_one_bone2d_node() # 获取骨骼名称并转换为小写
# 根据骨骼名称匹配正确的 Marker2D 目标
match bone_name:
"body/Right_hand":
print(mod.target_nodepath)
mod.target_nodepath = right_hand_2.get_path()
print(mod.target_nodepath)
"body/Left hand":
mod.target_nodepath = left_hand_2.get_path()
"body/Left_leg":
mod.target_nodepath = right_leg_2.get_path()
"body/Right_leg":
mod.target_nodepath = left_leg_2.get_path()
mod.set_enabled(true) # 启用 IK 修改器
# 确保所有修改器生效
modification_stack.enable_all_modifications(true)
modification_stack.setup()
func _print_marker_names():
print(right_hand_2)
print(right_hand_2.position)