Search Issue Tracker

By Design

By Design in 2023.3.X

Votes

0

Found in

2021.3.30f1

2022.3.10f1

2023.1.15f1

2023.2.0b12

2023.3.0a7

Issue ID

UUM-52903

Regression

No

Time of the “AnimationClipPlayable” will not automatically advance to the next frame when setting the time of the “AnimationClipPlayable”

Mecanim Animation

-

How to reproduce:
1. Open the user’s attached “Repro_latest.zip” project
2. Open “Test” Scene
3. Enter Play Mode
4. In the Hierarchy, select “SKM_Manny” GameObject
5. In the Inspector window, press the “Sync Once” button
6. Observe the Console window

Expected result: The results of GetTime in two consecutive PrepareFrame outputs are not equal
Actual result: The results of GetTime in two consecutive PrepareFrame outputs are equal

Reproducible with: 2021.3.30f1, 2022.3.10f1, 2023.1.15f1, 2023.2.0b12, 2023.3.0a7

Reproduced on: macOS 13.5.2 (Intel)
Not reproducible on: No other environment tested

Note: According to the rules of Playables, at this point, the `PrepareFrame` and `ProcessFrame` methods of the AnimationClipPlayable should not have been executed yet, so the impact caused by `SetTime` should theoretically be consumed in this frame and should not carry over to the next frame (user’s info)

  1. Resolution Note:

    The reason the results of GetTime in two consecutive PrepareFrame outputs is equal is because calling GetTime within the PrepareFrame function will return the time at the start of the current frame before the time has advanced in the Playable. Calling SetTime will override the current frame to the given time value, and the time will not be advanced any further in that frame. During the next frame, the time of the Playable will still advance correctly immediately after the PrepareFrame function.

    Frame 1
    1. SetTime in PrepareFrame -> overrides current time with the value set
    2. GetTime in PrepareFrame -> returns the time that was set
    3. Time is not advanced because the time was overridden this frame

    Frame 2
    1. GetTime in PrepareFrame -> returns time from last frame since time has not yet advanced
    2. Time is advanced by the delta time

  2. Resolution Note (2023.3.X):

    The reason the results of GetTime in two consecutive PrepareFrame outputs is equal is because calling GetTime within the PrepareFrame function will return the time at the start of the current frame before the time has advanced in the Playable. Calling SetTime will override the current frame to the given time value, and the time will not be advanced any further in that frame. During the next frame, the time of the Playable will still advance correctly immediately after the PrepareFrame function.

    Frame 1
    1. SetTime in PrepareFrame -> overrides current time with the value set
    2. GetTime in PrepareFrame -> returns the time that was set
    3. Time is not advanced because the time was overridden this frame

    Frame 2
    1. GetTime in PrepareFrame -> returns time from last frame since time has not yet advanced
    2. Time is advanced by the delta time

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.