@@ -182,8 +182,17 @@ internal bool UpdateVirtualCamera(ICinemachineCamera vcam, Vector3 worldUp, floa
182
182
{
183
183
//UnityEngine.Profiling.Profiler.BeginSample("CinemachineCore.UpdateVirtualCamera");
184
184
int now = Time . frameCount ;
185
- bool isSmartUpdate = CurrentUpdateFilter != UpdateFilter . Any ;
186
- bool isSmartLateUpdate = CurrentUpdateFilter == UpdateFilter . Late ;
185
+ UpdateFilter filter = CurrentUpdateFilter ;
186
+ bool isSmartUpdate = filter != UpdateFilter . ForcedFixed
187
+ && filter != UpdateFilter . ForcedLate ;
188
+ bool isSmartLateUpdate = filter == UpdateFilter . Late ;
189
+ if ( ! isSmartUpdate )
190
+ {
191
+ if ( filter == UpdateFilter . ForcedFixed )
192
+ filter = UpdateFilter . Fixed ;
193
+ if ( filter == UpdateFilter . ForcedLate )
194
+ filter = UpdateFilter . Late ;
195
+ }
187
196
188
197
if ( mUpdateStatus == null )
189
198
mUpdateStatus = new Dictionary < ICinemachineCamera , UpdateStatus > ( ) ;
@@ -215,13 +224,13 @@ internal bool UpdateVirtualCamera(ICinemachineCamera vcam, Vector3 worldUp, floa
215
224
if ( ! GetTargetPosition ( vcam , out targetPos ) )
216
225
updateNow = isSmartLateUpdate ; // no target
217
226
else
218
- updateNow = status . ChoosePreferredUpdate ( now , targetPos , CurrentUpdateFilter )
219
- == CurrentUpdateFilter ;
227
+ updateNow = status . ChoosePreferredUpdate ( now , targetPos , filter )
228
+ == filter ;
220
229
}
221
230
222
231
if ( updateNow )
223
232
{
224
- status . preferredUpdate = CurrentUpdateFilter ;
233
+ status . preferredUpdate = filter ;
225
234
while ( status . lastUpdateSubframe < subframes )
226
235
{
227
236
//Debug.Log(vcam.Name + ": frame " + Time.frameCount + "." + status.lastUpdateSubframe + ", " + CurrentUpdateFilter + ", deltaTime = " + deltaTime);
@@ -263,6 +272,7 @@ public UpdateStatus(int currentFrame)
263
272
targetPos = Matrix4x4 . zero ;
264
273
}
265
274
275
+ // Important: updateFilter may ONLY be Late or Fixed
266
276
public UpdateFilter ChoosePreferredUpdate (
267
277
int currentFrame , Matrix4x4 pos , UpdateFilter updateFilter )
268
278
{
@@ -297,7 +307,7 @@ public UpdateFilter ChoosePreferredUpdate(
297
307
Dictionary < ICinemachineCamera , UpdateStatus > mUpdateStatus ;
298
308
299
309
/// <summary>Internal use only</summary>
300
- public enum UpdateFilter { Fixed , Late , Any } ;
310
+ public enum UpdateFilter { Fixed , ForcedFixed , Late , ForcedLate } ;
301
311
internal UpdateFilter CurrentUpdateFilter { get ; set ; }
302
312
private static bool GetTargetPosition ( ICinemachineCamera vcam , out Matrix4x4 targetPos )
303
313
{
@@ -328,7 +338,7 @@ public UpdateFilter GetVcamUpdateStatus(ICinemachineCamera vcam)
328
338
{
329
339
UpdateStatus status ;
330
340
if ( mUpdateStatus == null || ! mUpdateStatus . TryGetValue ( vcam , out status ) )
331
- return UpdateFilter . Any ;
341
+ return UpdateFilter . Late ;
332
342
return status . preferredUpdate ;
333
343
}
334
344
0 commit comments