如何在不调用setget的情况下播放自定义属性动画?
解决方案
方法1:拆分内部存储变量与对外属性
将属性拆分为内部存储变量和对外暴露的带setget的属性,动画直接修改内部变量,绕过setget函数:
修改后的代码:
tool extends Node2D # 内部实际存储值的变量,动画直接操作这个变量 var _example: int = 0 # 对外暴露的属性,带setget逻辑 export(int) var example: int setget set_example, get_example func get_example() -> int: # 对外返回内部变量的值 return _example func set_example(val: int): print("Here!") _example = val
动画设置时,直接选择节点的_example变量作为动画轨道的目标属性即可,修改值时不会触发set_example函数。
方法2:添加直接设置的方法
保留原属性结构,新增一个专门用于动画调用的方法,直接修改属性值而不触发setget:
修改后的代码:
tool extends Node2D export(int) var example=0 setget set_example func set_example(val): print("Here!") example=val # 动画调用这个方法来直接设置值 func set_example_direct(val: int): # 直接给变量赋值,绕过setget .example = val
在动画编辑器中添加Call Method轨道,选择该节点的set_example_direct方法,传入对应的数值参数即可。这里的.是关键,它表示直接访问变量本身,而非通过setget方法。
方法3:使用Object类的_internal_set方法
Godot的Object类提供了_internal_set方法,可直接设置属性值而不触发setget函数。你可以在动画的脚本回调或自定义方法中调用它:
示例代码:
# 在动画中通过Call Method轨道调用该方法 func set_example_via_internal(val: int): _internal_set("example", val)
这个方法直接绕过属性的setget逻辑,修改底层存储的值。
内容的提问来源于stack exchange,提问作者cak3_lover
相关产品推荐
相关产品推荐

