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

如何在不调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:45:28