Skip to content

Commit a8a51e2

Browse files
update
some clean up from wip.
1 parent 4d691dc commit a8a51e2

File tree

4 files changed

+40
-77
lines changed

4 files changed

+40
-77
lines changed

com.unity.netcode.gameobjects/Runtime/Components/Interpolator/BufferedLinearInterpolator.cs

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ internal struct CurrentState
3636
public float DeltaTime;
3737
public float LerpT;
3838

39-
public T TargetValue;
4039
public T CurrentValue;
4140
public T PreviousValue;
4241

@@ -45,23 +44,18 @@ internal struct CurrentState
4544
public float AverageDeltaTime => m_AverageDeltaTime;
4645
public float FinalTimeToTarget => TimeToTargetValue - DeltaTime;
4746

48-
public bool AddDeltaTime(float deltaTime)
47+
public void AddDeltaTime(float deltaTime)
4948
{
5049
if (m_AverageDeltaTime == 0.0f)
5150
{
5251
m_AverageDeltaTime = deltaTime;
5352
}
5453
else
5554
{
56-
// Gradually adjust our delta time to keep this
57-
// value more consistent
58-
m_AverageDeltaTime = 3.0f * m_AverageDeltaTime;
5955
m_AverageDeltaTime += deltaTime;
60-
m_AverageDeltaTime *= 0.25f;
6156
}
6257
DeltaTime = Math.Max(DeltaTime + m_AverageDeltaTime, TimeToTargetValue);
6358
LerpT = DeltaTime / TimeToTargetValue;
64-
return FinalTimeToTarget <= m_AverageDeltaTime;
6559
}
6660

6761
public bool TargetTimeAproximatelyReached()
@@ -70,15 +64,14 @@ public bool TargetTimeAproximatelyReached()
7064
{
7165
return false;
7266
}
73-
return (m_AverageDeltaTime * 0.3333333f) >= FinalTimeToTarget;
67+
return m_AverageDeltaTime >= FinalTimeToTarget;
7468
}
7569

7670
public void Reset(T currentValue)
7771
{
7872
Target = null;
7973
CurrentValue = currentValue;
8074
PreviousValue = currentValue;
81-
TargetValue = currentValue;
8275
// When reset, we consider ourselves to have already arrived at the target (even if no target is set)
8376
LerpT = 1.0f;
8477
RelativeTime = 0.0;
@@ -147,22 +140,6 @@ public void Reset(T currentValue)
147140
private bool m_IsAngularValue;
148141
protected bool IsAngularValue => m_IsAngularValue;
149142

150-
internal void ConvertTransformSpace(Transform transform, bool inLocalSpace)
151-
{
152-
var count = m_Buffer.Count;
153-
for (int i = 0; i < count; i++)
154-
{
155-
var entry = m_Buffer.Dequeue();
156-
entry.Item = OnConvertTransformSpace(transform, entry.Item, inLocalSpace);
157-
m_Buffer.Enqueue(entry);
158-
}
159-
InterpolateState.CurrentValue = OnConvertTransformSpace(transform, InterpolateState.CurrentValue, inLocalSpace);
160-
var end = InterpolateState.Target.Value;
161-
end.Item = OnConvertTransformSpace(transform, end.Item, inLocalSpace);
162-
InterpolateState.Target = end;
163-
InLocalSpace = inLocalSpace;
164-
}
165-
166143
/// <summary>
167144
/// Resets interpolator to the defaults.
168145
/// </summary>
@@ -187,7 +164,7 @@ public void Clear()
187164
/// <param name="serverTime">The current server time</param>
188165
/// <param name="useSmoothDampening">Defaults to true and is the recommened way to achieve a smoother interpolation between buffer item values.</param>
189166
/// <param name="isAngularValue">When rotation is expressed as Euler values (i.e. Vector3 and/or float) this helps determine what kind of smooth dampening to use.</param>
190-
public void ResetTo(T targetValue, double serverTime, bool useSmoothDampening = true, bool isAngularValue = false)
167+
public void ResetTo(T targetValue, double serverTime, bool isAngularValue = false)
191168
{
192169
#if UNITY_EDITOR
193170
m_Name = GetType().Name;
@@ -198,8 +175,6 @@ public void ResetTo(T targetValue, double serverTime, bool useSmoothDampening =
198175
InterpolateState.Reset(targetValue);
199176
// TODO: If we get single lerping working, then m_CurrentInterpValue is no longer needed.
200177
m_CurrentInterpValue = targetValue;
201-
202-
m_UseSmoothDamening = useSmoothDampening;
203178
m_IsAngularValue = isAngularValue;
204179

205180
// Add the first measurement for our baseline
@@ -212,12 +187,16 @@ public void ResetTo(T targetValue, double serverTime, bool useSmoothDampening =
212187
/// <param name="renderTime">render time: the time in "ticks ago" relative to the current tick latency</param>
213188
/// <param name="minDeltaTime">minimum time delta (defaults to tick frequency)</param>
214189
/// <param name="maxDeltaTime">maximum time delta which defines the maximum time duration when consuming more than one item from the buffer</param>
215-
private void TryConsumeFromBuffer(double renderTime, float minDeltaTime, float maxDeltaTime)
190+
private void TryConsumeFromBuffer(double renderTime, float minDeltaTime, float maxDeltaTime, bool isSmoothed = false)
216191
{
217-
if (!InterpolateState.Target.HasValue ||
218-
(InterpolateState.Target.Value.TimeSent <= renderTime &&
219-
(InterpolateState.TargetTimeAproximatelyReached() ||
220-
IsAproximately(InterpolateState.CurrentValue, InterpolateState.Target.Value.Item))))
192+
var canGetNextItem = true;
193+
194+
if (isSmoothed && InterpolateState.Target.HasValue)
195+
{
196+
canGetNextItem = InterpolateState.TargetTimeAproximatelyReached() || IsAproximately(InterpolateState.CurrentValue, InterpolateState.Target.Value.Item);
197+
}
198+
199+
if (!InterpolateState.Target.HasValue || (InterpolateState.Target.Value.TimeSent <= renderTime && canGetNextItem))
221200
{
222201
BufferedItem? previousItem = null;
223202
var startTime = 0.0;
@@ -260,7 +239,14 @@ private void TryConsumeFromBuffer(double renderTime, float minDeltaTime, float m
260239
}
261240
// TODO: We might consider creating yet another queue to add these items to and assure that the time is accelerated
262241
// for each item as opposed to losing the resolution of the values.
263-
InterpolateState.TimeToTargetValue = Mathf.Clamp((float)(target.TimeSent - startTime), minDeltaTime, maxDeltaTime);
242+
if (isSmoothed)
243+
{
244+
InterpolateState.TimeToTargetValue = Mathf.Clamp((float)(target.TimeSent - startTime), minDeltaTime, maxDeltaTime);
245+
}
246+
else
247+
{
248+
InterpolateState.TimeToTargetValue = (float)(target.TimeSent - startTime);
249+
}
264250
InterpolateState.Target = target;
265251
}
266252
InterpolateState.DeltaTime = 0.0f;
@@ -299,12 +285,12 @@ internal T UpdateInternal(float deltaTime, NetworkTime serverTime)
299285
/// <returns>The newly interpolated value of type 'T'</returns>
300286
public T Update(float deltaTime, double tickLatencyAsTime, float minDeltaTime, float maxDeltaTime)
301287
{
302-
TryConsumeFromBuffer(tickLatencyAsTime, minDeltaTime, maxDeltaTime);
288+
TryConsumeFromBuffer(tickLatencyAsTime, minDeltaTime, maxDeltaTime, true);
303289
// Only interpolate when there is a start and end point and we have not already reached the end value
304290
if (InterpolateState.Target.HasValue)
305291
{
306292
InterpolateState.AddDeltaTime(deltaTime);
307-
InterpolateState.CurrentValue = SmoothDamp(InterpolateState.CurrentValue, InterpolateState.Target.Value.Item, ref m_RateOfChange, InterpolateState.TimeToTargetValue, InterpolateState.DeltaTime, 10000.0f);
293+
InterpolateState.CurrentValue = SmoothDamp(InterpolateState.CurrentValue, InterpolateState.Target.Value.Item, ref m_RateOfChange, InterpolateState.TimeToTargetValue, deltaTime);
308294
}
309295
m_NbItemsReceivedThisFrame = 0;
310296
return InterpolateState.CurrentValue;
@@ -439,6 +425,22 @@ protected internal virtual T OnConvertTransformSpace(Transform transform, T item
439425
return default;
440426
}
441427

428+
internal void ConvertTransformSpace(Transform transform, bool inLocalSpace)
429+
{
430+
var count = m_Buffer.Count;
431+
for (int i = 0; i < count; i++)
432+
{
433+
var entry = m_Buffer.Dequeue();
434+
entry.Item = OnConvertTransformSpace(transform, entry.Item, inLocalSpace);
435+
m_Buffer.Enqueue(entry);
436+
}
437+
InterpolateState.CurrentValue = OnConvertTransformSpace(transform, InterpolateState.CurrentValue, inLocalSpace);
438+
var end = InterpolateState.Target.Value;
439+
end.Item = OnConvertTransformSpace(transform, end.Item, inLocalSpace);
440+
InterpolateState.Target = end;
441+
InLocalSpace = inLocalSpace;
442+
}
443+
442444
// TODO: Collect data points so a single buffered linear interpolator can provide additional data points
443445
// to be visualized in RNSM.
444446
#region DEBUG_LOGGING

com.unity.netcode.gameobjects/Runtime/Components/NetworkTransform.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3753,7 +3753,7 @@ private void UpdateInterpolation()
37533753

37543754
var tickLatencyAsTime = m_CachedNetworkManager.LocalTime.TimeTicksAgo(tickLatency).Time;
37553755
var minDeltaTime = m_CachedNetworkManager.LocalTime.FixedDeltaTime;
3756-
var maxDeltaTime = 1.0f + (tickLatency * m_CachedNetworkManager.LocalTime.FixedDeltaTime);
3756+
var maxDeltaTime = (tickLatency * m_CachedNetworkManager.ServerTime.FixedDeltaTime);
37573757

37583758
var useLerp = InterpolationType == InterpolationTypes.Lerp;
37593759

com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -333,25 +333,6 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
333333

334334
MessageManager.CleanupDisconnectedClients();
335335
AnticipationSystem.ProcessReanticipation();
336-
337-
//foreach (var networkObjectEntry in NetworkTransformFixedUpdate)
338-
//{
339-
// // if not active or not spawned then skip
340-
// if (!networkObjectEntry.Value.gameObject.activeInHierarchy || !networkObjectEntry.Value.IsSpawned)
341-
// {
342-
// continue;
343-
// }
344-
345-
// foreach (var networkTransformEntry in networkObjectEntry.Value.NetworkTransforms)
346-
// {
347-
// // only update if enabled
348-
// if (networkTransformEntry.enabled)
349-
// {
350-
// networkTransformEntry.OnInterpolateFixedUpdate();
351-
// networkTransformEntry.OnFixedUpdate();
352-
// }
353-
// }
354-
//}
355336
}
356337
break;
357338
#if COM_UNITY_MODULES_PHYSICS
@@ -370,7 +351,6 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
370351
// only update if enabled
371352
if (networkTransformEntry.enabled)
372353
{
373-
networkTransformEntry.OnInterpolateFixedUpdate();
374354
networkTransformEntry.OnFixedUpdate();
375355
}
376356
}
@@ -382,25 +362,6 @@ public void NetworkUpdate(NetworkUpdateStage updateStage)
382362
{
383363
NetworkTimeSystem.UpdateTime();
384364
AnticipationSystem.Update();
385-
386-
//foreach (var networkObjectEntry in NetworkTransformFixedUpdate)
387-
//{
388-
// // if not active or not spawned then skip
389-
// if (!networkObjectEntry.Value.gameObject.activeInHierarchy || !networkObjectEntry.Value.IsSpawned)
390-
// {
391-
// continue;
392-
// }
393-
394-
// foreach (var networkTransformEntry in networkObjectEntry.Value.NetworkTransforms)
395-
// {
396-
// // only update if enabled
397-
// if (networkTransformEntry.enabled)
398-
// {
399-
// networkTransformEntry.OnInterpolateFixedUpdate();
400-
// //networkTransformEntry.OnFixedUpdate();
401-
// }
402-
// }
403-
//}
404365
}
405366
break;
406367
case NetworkUpdateStage.PreLateUpdate:

com.unity.netcode.gameobjects/Runtime/Timing/NetworkTimeSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ public bool Advance(double deltaTimeSec)
223223
if (LastSyncedRttSec > 0.0f)
224224
{
225225
m_TickLatencyAverage = Mathf.Lerp(m_TickLatencyAverage, (float)((LastSyncedRttSec + deltaTimeSec) / m_NetworkTickSystem.ServerTime.FixedDeltaTimeAsDouble), (float)deltaTimeSec);
226-
TickLatency = (int)Mathf.Max(1.0f, Mathf.Round(m_TickLatencyAverage)) + 1;
226+
TickLatency = (int)Mathf.Max(1.0f, Mathf.Round(m_TickLatencyAverage));
227227
}
228228

229229
if (Math.Abs(m_DesiredLocalTimeOffset - m_CurrentLocalTimeOffset) > HardResetThresholdSec || Math.Abs(m_DesiredServerTimeOffset - m_CurrentServerTimeOffset) > HardResetThresholdSec)

0 commit comments

Comments
 (0)