Track Offsets -> Apply Scene Offsets: Cannot adjust this?

I place a character in the world scene, add it to an animation track, and set "Apply Scene Offsets" so that the character will begin the Timeline track at that position and rotation.

Now I start working on the rest of the scene set up, making adjustments as I go.

I discover I have to move the character's starting point a bit, but no.... you cannot do that. You have already set the character's scene offset earlier, so why would you ever want to make a change to it? Timeline just jumps the character back to the originally established scene offset.

First, I tried setting the track's scene offset again, hoping it would overwrite the original setting to the new position/rotation. This would be an inconvenient step to remember every time you make an adjustment, but not unusual for Unity. However, no, not even that is allowed. You are locked to your first choice.

I can manually adjust the clip transform of the first clip (so long as it will forever be the first clip in the track), but that is a stupid solution. That can't be the right method.

I had to delete the whole track and start again. I did that for a while, before I discovered that if I remove the character reference and then re-add it I can finally set the Scene Offset for the character again.

So, to adjust the starting point of an object in timeline, you have to unlink it from the timeline track, make the transform adjustments, then drag it back into the track and set "apply scene offsets".

What do I expect:
If I tell the track to use the object's scene offset as the starting point for that track, then no matter where I move the object in the scene, it's new position should be the starting point for that track.

Is there some way to make this work that I haven't discovered yet?

It is so time consuming and frustrating fighting with Timeline over basic things. I make a change and then have to manually go through the tracks and update all the things that should auto-update. Like, don't get me started on needing to set "Match Offsets to Previous Clip" EVERY TIME I MAKE A CHANGE! You already have overrides for this behavior for the small percentage of people who don't want clips to match (for whatever reason). Why is this not the default behavior?
At the least, if I have already told a clip to match previous offsets, it should continue to do so when I adjust blending position/length, start and end time offsets of either clips, etc.

2 Likes


I am convinced that:

  1. Timeline was designed by aliens.

  2. No-one uses it, because I don't know how people do useful things with it in its current state and how it plays with other parts of Unity (did you know, Collaborate corrupts Timelines if more than one person breathe in a Timeline's general direction?)

4 Likes

@Kholeslaw Simply turn off preview mode before changing your character position. No need to delete or unassign anything. Scene Offset mode means the character will start from where he placed in the scene, but once you have any animation that applies to the transform, the transform goes into 'preview' - indicated in the inspector by fields with a blue background.

If a value is changed while in preview mode, it is never saved to the scene.

2 Likes

Sorry for the snarky posts, but do you consider this to be the intuitive way to do this?

Timeline is so very close to being useful, and it opens up a lot of things I would love to do, but fighting with its workflow is infuriating. I realize it's because I am an idiot half the time, but the other half is on you! :P

2 Likes

I won't claim it is the most intuitive. It's not a workflow we strongly considered with that feature in particular, and as you mention that is on us.

Scene Offsets were introduced in 2018.2 and we spent more focus getting the initial position/rotation properly captured, as our use cases didn't consider the user would change the scene position while timeline was in preview.

However, thanks for posting and pointing it out. That does help influence where we go with the product.

I am trying to record animations. I tried to turn the preview off but it turns itself on whenever I hit the record button on the animation track. The result is that there is always an offset of sorts in play mode while it pays correctly when I hit play on the timeline. Is there a way around this?

I mute the timeline track, move the character, then unmute it.

It is not ideal though as I would like to adjust the position relative to its current point (e.g., I want the character to walk and arrive at a particular place at a particular time - I can scrub the playhead to that time, but I cannot move the character. I have to judge how far to move it, mute the track, move its original position, unmute it, check if I got it right, rinse and repeat.). What I would really like is just to move the character and have the delta position change applied to the original character position.

(Thinks to self. Hmmm. Maybe could create a simple custom script two new menu items - a "mark" position of character and a "apply delta movement" menu item that works out the delta from the original position and applies it behind the scenes. I might give that a go...)

I did not know you could turn off 'preview' mode as another way to move the character! I am going to give that a go as well. I have noticed you can apply prefab overrides in preview mode, but you frequently cannot unset them for some reason.You have to exit preview mode, remove the override, then turn it back on. Very strange.

Well, I had a go but failed. I tried muting the track via script, adjusting position, unmuting but I think there are additional lifecycle steps (not sure how to do from inside menu item code). I could change the localPosition, but it was overwritten as soon as my function exited. Also tried turning off preview mode via script to make the animation system let go - same problem. Tried disabling the Animator component. Same again. Used Reflection to update m_ScreenOffsetPosition inside AnimationTrack, but I think its only used when setting up the playable state. Tried to break into the AnimationClipPlayable class, but its partially implemented in C/C++ I think.

I think the "right" solution (Unity feature request!) is to enhance the "move" and "rotate" controls in the scene window so if in animation preview mode and the selected object is bound to an active animation track, it understands scene offsets and updates the original position of the animated object (and refreshes all the windows etc, reseeking to the time offset after changing the position), not the current value which is just going to be overridden as soon as the playable director takes over again.

In case of use, I put a crude 3-step process script up at https://wordpress.com/post/extra-ordinary.tv/2563. You can mark a character's position, move it, mark the second position, exit preview mode, then apply the delta movement to the character. When you go back into preview mode it will be in the correct position. (If I can work out how to change the scene character position from inside the script while in preview mode, this could be simplified to 2 steps).

1 Like

Oh, and at this stage it was more curiosity. The three step process I have works completely fine, so I would not spend much brainpower on this one. I think the real solution is to improve the Move command. I might try and work out how to submit a feature request.

1 Like

The approach I had for this was to use a proxy root for the timeline that a character would get constrained to when binding. Animating its position/rotation while in preview works fine, and the character's transform automatically updates relative to its movements. And any regular animations are applied directly to the character.