Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Animation
繼承: Resource < RefCounted < Object
用來儲存可對引擎中任何物件進行動畫化的資料。
說明
此資源保存可用於對引擎中任何物件進行動畫化的資料。動畫由多條「軌道」組成,每條軌道必須連結至一個節點,並可透過在軌道上加入帶時間的鍵值(事件)來隨時間改變該節點狀態。
# 建立一段動畫,使名為 "Enemy" 的節點在 2 秒內向右移動 100 像素。
var animation = Animation.new()
var track_index = animation.add_track(Animation.TYPE_VALUE)
animation.track_set_path(track_index, "Enemy:position:x")
animation.track_insert_key(track_index, 0.0, 0)
animation.track_insert_key(track_index, 2.0, 100)
animation.length = 2.0
// 建立一段動畫,使名為 "Enemy" 的節點在 2 秒內向右移動 100 像素。
var animation = new Animation();
int trackIndex = animation.AddTrack(Animation.TrackType.Value);
animation.TrackSetPath(trackIndex, "Enemy:position:x");
animation.TrackInsertKey(trackIndex, 0.0f, 0);
animation.TrackInsertKey(trackIndex, 2.0f, 100);
animation.Length = 2.0f;
動畫本身只是資料容器,必須掛到 AnimationPlayer 等節點上才能播放。不同軌道有不同類型,並有各自專用的方法;可參考 TrackType 以瞭解可用型別。
注意: 針對 3D 的位置/旋轉/縮放,為效能考量建議使用專用的 TYPE_POSITION_3D、TYPE_ROTATION_3D、TYPE_SCALE_3D 軌道類型,而非使用一般的 TYPE_VALUE。
教學
屬性
|
||
|
||
|
||
|
方法
void |
add_marker(name: StringName, time: float) |
animation_track_get_key_animation(track_idx: int, key_idx: int) const |
|
animation_track_insert_key(track_idx: int, time: float, animation: StringName) |
|
void |
animation_track_set_key_animation(track_idx: int, key_idx: int, animation: StringName) |
audio_track_get_key_end_offset(track_idx: int, key_idx: int) const |
|
audio_track_get_key_start_offset(track_idx: int, key_idx: int) const |
|
audio_track_get_key_stream(track_idx: int, key_idx: int) const |
|
audio_track_insert_key(track_idx: int, time: float, stream: Resource, start_offset: float = 0, end_offset: float = 0) |
|
audio_track_is_use_blend(track_idx: int) const |
|
void |
audio_track_set_key_end_offset(track_idx: int, key_idx: int, offset: float) |
void |
audio_track_set_key_start_offset(track_idx: int, key_idx: int, offset: float) |
void |
audio_track_set_key_stream(track_idx: int, key_idx: int, stream: Resource) |
void |
audio_track_set_use_blend(track_idx: int, enable: bool) |
bezier_track_get_key_in_handle(track_idx: int, key_idx: int) const |
|
bezier_track_get_key_out_handle(track_idx: int, key_idx: int) const |
|
bezier_track_get_key_value(track_idx: int, key_idx: int) const |
|
bezier_track_insert_key(track_idx: int, time: float, value: float, in_handle: Vector2 = Vector2(0, 0), out_handle: Vector2 = Vector2(0, 0)) |
|
bezier_track_interpolate(track_idx: int, time: float) const |
|
void |
bezier_track_set_key_in_handle(track_idx: int, key_idx: int, in_handle: Vector2, balanced_value_time_ratio: float = 1.0) |
void |
bezier_track_set_key_out_handle(track_idx: int, key_idx: int, out_handle: Vector2, balanced_value_time_ratio: float = 1.0) |
void |
bezier_track_set_key_value(track_idx: int, key_idx: int, value: float) |
blend_shape_track_insert_key(track_idx: int, time: float, amount: float) |
|
blend_shape_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const |
|
void |
clear() |
void |
compress(page_size: int = 8192, fps: int = 120, split_tolerance: float = 4.0) |
void |
copy_track(track_idx: int, to_animation: Animation) |
find_track(path: NodePath, type: TrackType) const |
|
get_marker_at_time(time: float) const |
|
get_marker_color(name: StringName) const |
|
get_marker_names() const |
|
get_marker_time(name: StringName) const |
|
get_next_marker(time: float) const |
|
get_prev_marker(time: float) const |
|
get_track_count() const |
|
has_marker(name: StringName) const |
|
method_track_get_name(track_idx: int, key_idx: int) const |
|
method_track_get_params(track_idx: int, key_idx: int) const |
|
void |
optimize(allowed_velocity_err: float = 0.01, allowed_angular_err: float = 0.01, precision: int = 3) |
position_track_insert_key(track_idx: int, time: float, position: Vector3) |
|
position_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const |
|
void |
remove_marker(name: StringName) |
void |
remove_track(track_idx: int) |
rotation_track_insert_key(track_idx: int, time: float, rotation: Quaternion) |
|
rotation_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const |
|
scale_track_insert_key(track_idx: int, time: float, scale: Vector3) |
|
scale_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const |
|
void |
set_marker_color(name: StringName, color: Color) |
track_find_key(track_idx: int, time: float, find_mode: FindMode = 0, limit: bool = false, backward: bool = false) const |
|
track_get_interpolation_loop_wrap(track_idx: int) const |
|
track_get_interpolation_type(track_idx: int) const |
|
track_get_key_count(track_idx: int) const |
|
track_get_key_time(track_idx: int, key_idx: int) const |
|
track_get_key_transition(track_idx: int, key_idx: int) const |
|
track_get_key_value(track_idx: int, key_idx: int) const |
|
track_get_path(track_idx: int) const |
|
track_get_type(track_idx: int) const |
|
track_insert_key(track_idx: int, time: float, key: Variant, transition: float = 1) |
|
track_is_compressed(track_idx: int) const |
|
track_is_enabled(track_idx: int) const |
|
track_is_imported(track_idx: int) const |
|
void |
track_move_down(track_idx: int) |
void |
track_move_to(track_idx: int, to_idx: int) |
void |
track_move_up(track_idx: int) |
void |
track_remove_key(track_idx: int, key_idx: int) |
void |
track_remove_key_at_time(track_idx: int, time: float) |
void |
track_set_enabled(track_idx: int, enabled: bool) |
void |
track_set_imported(track_idx: int, imported: bool) |
void |
track_set_interpolation_loop_wrap(track_idx: int, interpolation: bool) |
void |
track_set_interpolation_type(track_idx: int, interpolation: InterpolationType) |
void |
track_set_key_time(track_idx: int, key_idx: int, time: float) |
void |
track_set_key_transition(track_idx: int, key_idx: int, transition: float) |
void |
track_set_key_value(track_idx: int, key: int, value: Variant) |
void |
track_set_path(track_idx: int, path: NodePath) |
void |
track_swap(track_idx: int, with_idx: int) |
value_track_get_update_mode(track_idx: int) const |
|
value_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const |
|
void |
value_track_set_update_mode(track_idx: int, mode: UpdateMode) |
列舉
enum TrackType: 🔗
TrackType TYPE_VALUE = 0
值軌道可設定節點屬性中的值,但僅限可插值者。對於 3D 位置/旋轉/縮放,基於效能考量建議使用專用的 TYPE_POSITION_3D、TYPE_ROTATION_3D 與 TYPE_SCALE_3D 軌道型別,而非 TYPE_VALUE。
TrackType TYPE_POSITION_3D = 1
3D 位置軌道(值儲存在 Vector3 中)。
TrackType TYPE_ROTATION_3D = 2
3D 旋轉軌道(值儲存在 Quaternion 中)。
TrackType TYPE_SCALE_3D = 3
3D 縮放軌道(值儲存在 Vector3 中)。
TrackType TYPE_BLEND_SHAPE = 4
混合形狀軌道。
TrackType TYPE_METHOD = 5
方法軌道會於每個關鍵影格以指定參數呼叫函式。
TrackType TYPE_BEZIER = 6
貝塞爾軌道可透過自訂曲線對數值進行插值,也可用於為向量或顏色的子屬性製作動畫(例如 Color 的 Alpha 值)。
TrackType TYPE_AUDIO = 7
音訊軌道可使用任一種類的 AudioStreamPlayer 播放音訊串流,並可於動畫中剪輯與預覽該串流。
TrackType TYPE_ANIMATION = 8
動畫軌道會在其他 AnimationPlayer 節點播放動畫。
enum InterpolationType: 🔗
InterpolationType INTERPOLATION_NEAREST = 0
無插值(鄰近值)。
InterpolationType INTERPOLATION_LINEAR = 1
線性插值。
InterpolationType INTERPOLATION_CUBIC = 2
三次插值。較線性插值平滑但計算成本更高;對於自外部軟體匯入之複雜 3D 動畫,即便需提高影格率,也建議維持使用 INTERPOLATION_LINEAR。
InterpolationType INTERPOLATION_LINEAR_ANGLE = 3
最短路徑旋轉的線性插值。
注意: 結果值會被正規化,因此可能與鍵值不相符。
InterpolationType INTERPOLATION_CUBIC_ANGLE = 4
最短路徑旋轉的三次插值。
注意: 結果值會被正規化,因此可能與鍵值不相符。
enum UpdateMode: 🔗
UpdateMode UPDATE_CONTINUOUS = 0
在關鍵影格之間持續更新並保持值。
UpdateMode UPDATE_DISCRETE = 1
僅於關鍵影格更新。
UpdateMode UPDATE_CAPTURE = 2
與 UPDATE_CONTINUOUS 相同,但作為旗標以擷取目前物件的值,並在部分方法中進行插值。另請參閱 AnimationMixer.capture()、AnimationPlayer.playback_auto_capture 與 AnimationPlayer.play_with_capture()。
enum LoopMode: 🔗
LoopMode LOOP_NONE = 0
在動畫兩端,動畫將停止播放。
LoopMode LOOP_LINEAR = 1
在動畫兩端,動畫將不改變播放方向地重複播放。
LoopMode LOOP_PINGPONG = 2
在動畫兩端重複正播與反播。
enum LoopedFlag: 🔗
LoopedFlag LOOPED_FLAG_NONE = 0
此旗標指示動畫不進行任何迴圈。
LoopedFlag LOOPED_FLAG_END = 1
此旗標表示動畫已到達尾端並剛完成迴圈處理。
LoopedFlag LOOPED_FLAG_START = 2
此旗標表示動畫已回到起始並剛完成迴圈處理。
enum FindMode: 🔗
FindMode FIND_MODE_NEAREST = 0
尋找最近的時間鍵。
FindMode FIND_MODE_APPROX = 1
僅尋找與時間近似的鍵。
FindMode FIND_MODE_EXACT = 2
僅尋找與時間完全相符的鍵。
屬性說明
bool capture_included = false 🔗
bool is_capture_included()
若包含擷取軌道則返回 true。此值為效能考量的快取唯讀值。
動畫的總長度(單位:秒)。
注意: 長度並不以最後一個關鍵影格為界,因為為了正確插值與迴圈,最後一個鍵可能位於結束前或之後。
Determines the behavior of both ends of the animation timeline during animation playback. This indicates whether and how the animation should be restarted, and is also used to correctly interpolate animation cycles.
動畫步長值。
方法說明
void add_marker(name: StringName, time: float) 🔗
將標記新增到此 Animation。
int add_track(type: TrackType, at_position: int = -1) 🔗
向動畫新增軌道。
StringName animation_track_get_key_animation(track_idx: int, key_idx: int) const 🔗
回傳位於 key_idx 的鍵所對應的動畫名稱。track_idx 必須是動畫軌道的索引。
int animation_track_insert_key(track_idx: int, time: float, animation: StringName) 🔗
在指定 time(秒)插入鍵,鍵值為 animation。track_idx 必須是動畫軌道索引。
void animation_track_set_key_animation(track_idx: int, key_idx: int, animation: StringName) 🔗
將索引為 key_idx 的鍵值設為 animation。track_idx 必須是動畫軌道索引。
float audio_track_get_key_end_offset(track_idx: int, key_idx: int) const 🔗
回傳索引為 key_idx 的鍵的結束偏移量。track_idx 必須是音訊軌道索引。
結束偏移量表示在音訊流結尾被截去的秒數。
float audio_track_get_key_start_offset(track_idx: int, key_idx: int) const 🔗
回傳索引為 key_idx 的鍵的起始偏移量。track_idx 必須是音訊軌道索引。
起始偏移量表示在音訊流開頭被截去的秒數。
Resource audio_track_get_key_stream(track_idx: int, key_idx: int) const 🔗
回傳索引為 key_idx 的鍵所使用的音訊流。track_idx 必須是音訊軌道索引。
int audio_track_insert_key(track_idx: int, time: float, stream: Resource, start_offset: float = 0, end_offset: float = 0) 🔗
在指定的 time(秒)於音訊軌道插入鍵。track_idx 必須是音訊軌道索引。
stream 為要播放的 AudioStream,而 start_offset 與 end_offset 分別為音訊開頭與結尾欲截去的秒數。
bool audio_track_is_use_blend(track_idx: int) const 🔗
若 track_idx 的軌道會與其他動畫混合則回傳 true。
void audio_track_set_key_end_offset(track_idx: int, key_idx: int, offset: float) 🔗
將索引為 key_idx 的鍵的結束偏移量設為 offset 秒。track_idx 必須是音訊軌道索引。
void audio_track_set_key_start_offset(track_idx: int, key_idx: int, offset: float) 🔗
將索引為 key_idx 的鍵的起始偏移量設為 offset 秒。track_idx 必須是音訊軌道索引。
void audio_track_set_key_stream(track_idx: int, key_idx: int, stream: Resource) 🔗
將索引為 key_idx 的鍵所用的音訊流設為 stream。track_idx 必須是音訊軌道索引。
void audio_track_set_use_blend(track_idx: int, enable: bool) 🔗
設定此軌道是否與其他動畫混合。若為 true,播放音量會依混合值變動。
Vector2 bezier_track_get_key_in_handle(track_idx: int, key_idx: int) const 🔗
回傳索引為 key_idx 的鍵的「入端控制點」位置。track_idx 必須是貝茲曲線軌道索引。
Vector2 bezier_track_get_key_out_handle(track_idx: int, key_idx: int) const 🔗
回傳索引為 key_idx 的鍵的「出端控制點」位置。track_idx 必須是貝茲曲線軌道索引。
float bezier_track_get_key_value(track_idx: int, key_idx: int) const 🔗
回傳索引為 key_idx 的鍵值。track_idx 必須是貝茲曲線軌道索引。
int bezier_track_insert_key(track_idx: int, time: float, value: float, in_handle: Vector2 = Vector2(0, 0), out_handle: Vector2 = Vector2(0, 0)) 🔗
在指定 time(秒)於貝茲曲線軌道插入鍵。track_idx 必須是貝茲曲線軌道索引。
in_handle 為該點左側控制點,out_handle 為右側控制點,value 為該點實際值。
float bezier_track_interpolate(track_idx: int, time: float) const 🔗
回傳在指定 time(秒)處插值後的值。track_idx 必須是貝茲曲線軌道索引。
void bezier_track_set_key_in_handle(track_idx: int, key_idx: int, in_handle: Vector2, balanced_value_time_ratio: float = 1.0) 🔗
將索引為 key_idx 的鍵之入端控制點設為 in_handle。track_idx 必須是貝茲曲線軌道索引。
void bezier_track_set_key_out_handle(track_idx: int, key_idx: int, out_handle: Vector2, balanced_value_time_ratio: float = 1.0) 🔗
將索引為 key_idx 的鍵之出端控制點設為 out_handle。track_idx 必須是貝茲曲線軌道索引。
void bezier_track_set_key_value(track_idx: int, key_idx: int, value: float) 🔗
將索引為 key_idx 的鍵值設為指定值。track_idx 必須是貝茲曲線軌道索引。
int blend_shape_track_insert_key(track_idx: int, time: float, amount: float) 🔗
在指定的混合形狀軌道插入關鍵影格,並回傳其索引。
float blend_shape_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const 🔗
回傳在指定時間(秒)經插值後之混合形狀值。track_idx 必須是混合形狀軌道索引。
void clear() 🔗
清除動畫(移除所有軌道並重設所有設定)。
void compress(page_size: int = 8192, fps: int = 120, split_tolerance: float = 4.0) 🔗
就地壓縮動畫及其所有軌道;壓縮後再呼叫 track_is_compressed() 會回傳 true。壓縮軌道可降低播放時的記憶體用量,主要用於外部 3D 軟體匯入的複雜 3D 動畫(如過場)。壓縮為有損處理,但在實際使用中通常難以察覺。
注意: 壓縮後的軌道無法於編輯器內編輯等,僅在確有需求時再使用。
void copy_track(track_idx: int, to_animation: Animation) 🔗
將本動畫中的指定軌道複製一份並新增到 to_animation。
int find_track(path: NodePath, type: TrackType) const 🔗
回傳指定軌道的索引;若找不到則回傳 -1。
StringName get_marker_at_time(time: float) const 🔗
回傳位於指定時間點的標記名稱。
Color get_marker_color(name: StringName) const 🔗
回傳指定標記的顏色。
PackedStringArray get_marker_names() const 🔗
依時間排序後,回傳此 Animation 內所有標記。
float get_marker_time(name: StringName) const 🔗
回傳指定標記所在的時間點。
StringName get_next_marker(time: float) const 🔗
回傳位於指定時間之後最近的標記;若不存在則回傳空字串。
StringName get_prev_marker(time: float) const 🔗
回傳位於指定時間之前最近的標記;若不存在則回傳空字串。
回傳動畫內的軌道數量。
bool has_marker(name: StringName) const 🔗
若此 Animation 含有指定名稱的標記則回傳 true。
StringName method_track_get_name(track_idx: int, key_idx: int) const 🔗
回傳方法軌道所呼叫的方法名稱。
Array method_track_get_params(track_idx: int, key_idx: int) const 🔗
返回給定方法軌道中給定鍵的方法要呼叫的參數值。
void optimize(allowed_velocity_err: float = 0.01, allowed_angular_err: float = 0.01, precision: int = 3) 🔗
就地最佳化此動畫及其所有軌道。僅保留足以讓動畫維持在指定誤差範圍內所需的關鍵影格數。
int position_track_insert_key(track_idx: int, time: float, position: Vector3) 🔗
在給定的 3D 位置軌道中插入關鍵影格。返回該關鍵影格的索引。
Vector3 position_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const 🔗
返回位於給定時間(以秒為單位)的插值後的位置值。track_idx 必須是 3D 位置軌道的索引。
void remove_marker(name: StringName) 🔗
從此 Animation 中移除具有指定名稱的標記。
void remove_track(track_idx: int) 🔗
透過指定軌道索引來移除軌道。
int rotation_track_insert_key(track_idx: int, time: float, rotation: Quaternion) 🔗
在給定的 3D 旋轉軌道中插入關鍵影格。返回該關鍵影格的索引。
Quaternion rotation_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const 🔗
返回位於給定時間(以秒為單位)的插值後的旋轉值。track_idx 必須是 3D 旋轉軌道的索引。
int scale_track_insert_key(track_idx: int, time: float, scale: Vector3) 🔗
在給定的 3D 縮放軌道中插入關鍵影格。返回該關鍵影格的索引。
Vector3 scale_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const 🔗
返回位於給定時間(以秒為單位)的插值後的縮放值。track_idx 必須是 3D 縮放軌道的索引。
void set_marker_color(name: StringName, color: Color) 🔗
設定指定標記的顏色。
int track_find_key(track_idx: int, time: float, find_mode: FindMode = 0, limit: bool = false, backward: bool = false) const 🔗
在指定軌道中依時間尋找鍵的索引。可選擇僅於提供近似/精確時間時才進行尋找。
若 limit 為 true,則不會回傳動畫範圍之外的鍵。
若 backward 為 true,則在依賴單向處理的方法中會反轉搜尋方向。
例如,當 find_mode 為 FIND_MODE_NEAREST 時,若在跳轉後於目前位置找不到鍵,預設會向位置之前搜尋並取回第一個找到的鍵,但若 backward 為 true,則會向位置之後搜尋並取回第一個鍵。
bool track_get_interpolation_loop_wrap(track_idx: int) const 🔗
若 track_idx 處的軌道會環繞插值迴圈則返回 true。新建軌道預設皆會環繞插值迴圈。
InterpolationType track_get_interpolation_type(track_idx: int) const 🔗
返回指定軌道的插值類型。
int track_get_key_count(track_idx: int) const 🔗
返回給定軌道中的關鍵影格數量。
float track_get_key_time(track_idx: int, key_idx: int) const 🔗
返回關鍵影格所在的時間。
float track_get_key_transition(track_idx: int, key_idx: int) const 🔗
返回指定關鍵影格的過渡曲線(緩動)(參閱內建數學函式 @GlobalScope.ease())。
Variant track_get_key_value(track_idx: int, key_idx: int) const 🔗
返回給定軌道中指定關鍵影格的值。
NodePath track_get_path(track_idx: int) const 🔗
取得軌道的路徑。關於路徑格式的詳細資料,請參閱 track_set_path()。
TrackType track_get_type(track_idx: int) const 🔗
取得軌道的型別。
int track_insert_key(track_idx: int, time: float, key: Variant, transition: float = 1) 🔗
在給定軌道中插入通用關鍵影格。返回該關鍵影格的索引。
bool track_is_compressed(track_idx: int) const 🔗
若軌道已被壓縮則返回 true,否則返回 false。另見 compress()。
bool track_is_enabled(track_idx: int) const 🔗
若索引 track_idx 的軌道已啟用則返回 true。
bool track_is_imported(track_idx: int) const 🔗
若給定軌道為匯入則返回 true,否則返回 false。
void track_move_down(track_idx: int) 🔗
將軌道下移。
void track_move_to(track_idx: int, to_idx: int) 🔗
將軌道 track_idx 的索引位置改為 to_idx。
void track_move_up(track_idx: int) 🔗
將軌道上移。
void track_remove_key(track_idx: int, key_idx: int) 🔗
依索引自指定軌道移除鍵。
void track_remove_key_at_time(track_idx: int, time: float) 🔗
於指定軌道的 time 移除鍵。
void track_set_enabled(track_idx: int, enabled: bool) 🔗
啟用/停用指定軌道。軌道預設為啟用。
void track_set_imported(track_idx: int, imported: bool) 🔗
設定指定軌道是否為匯入狀態。
void track_set_interpolation_loop_wrap(track_idx: int, interpolation: bool) 🔗
若為 true,則索引 track_idx 的軌道會環繞插值迴圈。
void track_set_interpolation_type(track_idx: int, interpolation: InterpolationType) 🔗
設定指定軌道的插值類型。
void track_set_key_time(track_idx: int, key_idx: int, time: float) 🔗
設定既有關鍵影格的時間。
void track_set_key_transition(track_idx: int, key_idx: int, transition: float) 🔗
設定指定關鍵影格的過渡曲線(緩動)(參閱內建數學函式 @GlobalScope.ease())。
void track_set_key_value(track_idx: int, key: int, value: Variant) 🔗
設定既有關鍵影格的值。
void track_set_path(track_idx: int, path: NodePath) 🔗
設定軌道的路徑。路徑必須是指向場景樹中節點的有效路徑,且必須從會播放動畫的 AnimationMixer.root_node 開始指定。控制屬性或骨骼的軌道必須在路徑後以 ":" 加上其名稱。
例如,"character/skeleton:ankle" 或 "character/mesh:transform/local"。
void track_swap(track_idx: int, with_idx: int) 🔗
將軌道 track_idx 的索引位置與軌道 with_idx 互換。
UpdateMode value_track_get_update_mode(track_idx: int) const 🔗
返回值軌道的更新模式。
Variant value_track_interpolate(track_idx: int, time_sec: float, backward: bool = false) const 🔗
返回於給定時間(以秒為單位)的插值後的值。track_idx 必須是值軌道的索引。
backward 主要影響將 UPDATE_DISCRETE 經由 AnimationMixer.ANIMATION_CALLBACK_MODE_DISCRETE_FORCE_CONTINUOUS 轉換後之軌道的鍵值檢索方向,以使結果與 track_find_key() 一致。
void value_track_set_update_mode(track_idx: int, mode: UpdateMode) 🔗
設定值軌道的更新模式。