Skip to content

Commit 4ce6c50

Browse files
update
NetworkTransform and BufferedLinearInterpolator related updates.
1 parent 08f261c commit 4ce6c50

9 files changed

+651
-805
lines changed

com.unity.netcode.gameobjects/Editor/NetworkTransformEditor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class NetworkTransformEditor : NetcodeEditorBase<NetworkTransform>
2828
private SerializedProperty m_ScaleThresholdProperty;
2929
private SerializedProperty m_InLocalSpaceProperty;
3030
private SerializedProperty m_InterpolateProperty;
31+
private SerializedProperty m_InterpolationTypeProperty;
3132

3233
private SerializedProperty m_UseQuaternionSynchronization;
3334
private SerializedProperty m_UseQuaternionCompression;
@@ -61,6 +62,7 @@ public override void OnEnable()
6162
m_ScaleThresholdProperty = serializedObject.FindProperty(nameof(NetworkTransform.ScaleThreshold));
6263
m_InLocalSpaceProperty = serializedObject.FindProperty(nameof(NetworkTransform.InLocalSpace));
6364
m_InterpolateProperty = serializedObject.FindProperty(nameof(NetworkTransform.Interpolate));
65+
m_InterpolationTypeProperty = serializedObject.FindProperty(nameof(NetworkTransform.InterpolationType));
6466
m_UseQuaternionSynchronization = serializedObject.FindProperty(nameof(NetworkTransform.UseQuaternionSynchronization));
6567
m_UseQuaternionCompression = serializedObject.FindProperty(nameof(NetworkTransform.UseQuaternionCompression));
6668
m_UseHalfFloatPrecision = serializedObject.FindProperty(nameof(NetworkTransform.UseHalfFloatPrecision));
@@ -159,6 +161,10 @@ private void DisplayNetworkTransformProperties()
159161
if (!networkTransform.HideInterpolateValue)
160162
{
161163
EditorGUILayout.PropertyField(m_InterpolateProperty);
164+
if (networkTransform.Interpolate)
165+
{
166+
EditorGUILayout.PropertyField(m_InterpolationTypeProperty);
167+
}
162168
}
163169
EditorGUILayout.PropertyField(m_SlerpPosition);
164170
EditorGUILayout.PropertyField(m_UseQuaternionSynchronization);

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

Lines changed: 319 additions & 679 deletions
Large diffs are not rendered by default.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using UnityEngine;
2+
3+
namespace Unity.Netcode
4+
{
5+
/// <inheritdoc />
6+
/// <remarks>
7+
/// This is a buffered linear interpolator for a <see cref="float"/> type value
8+
/// </remarks>
9+
public class BufferedLinearInterpolatorFloat : BufferedLinearInterpolator<float>
10+
{
11+
/// <inheritdoc />
12+
protected override float InterpolateUnclamped(float start, float end, float time)
13+
{
14+
return Mathf.LerpUnclamped(start, end, time);
15+
}
16+
17+
/// <inheritdoc />
18+
protected override float Interpolate(float start, float end, float time)
19+
{
20+
return Mathf.Lerp(start, end, time);
21+
}
22+
23+
/// <inheritdoc />
24+
protected internal override bool IsAproximately(float first, float second, float precision = 1E-07F)
25+
{
26+
return Mathf.Approximately(first, second);
27+
}
28+
29+
/// <inheritdoc />
30+
protected internal override float SmoothDamp(float current, float target, ref float rateOfChange, float duration, float deltaTime, float maxSpeed = float.PositiveInfinity)
31+
{
32+
if (IsAngularValue)
33+
{
34+
return Mathf.SmoothDampAngle(current, target, ref rateOfChange, duration, maxSpeed, deltaTime);
35+
}
36+
else
37+
{
38+
return Mathf.SmoothDamp(current, target, ref rateOfChange, duration, maxSpeed, deltaTime);
39+
}
40+
}
41+
}
42+
}

com.unity.netcode.gameobjects/Runtime/Components/Interpolator/BufferedLinearInterpolatorFloat.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using UnityEngine;
2+
3+
namespace Unity.Netcode
4+
{
5+
/// <inheritdoc />
6+
/// <remarks>
7+
/// This is a buffered linear interpolator for a <see cref="Quaternion"/> type value
8+
/// </remarks>
9+
public class BufferedLinearInterpolatorQuaternion : BufferedLinearInterpolator<Quaternion>
10+
{
11+
/// <summary>
12+
/// Use <see cref="Quaternion.Slerp"/> when <see cref="true"/>.
13+
/// Use <see cref="Quaternion.Lerp"/> when <see cref="false"/>
14+
/// </summary>
15+
/// <remarks>
16+
/// When using half precision (due to the imprecision) using <see cref="Quaternion.Lerp"/> is
17+
/// less processor intensive (i.e. precision is already "imprecise").
18+
/// When using full precision (to maintain precision) using <see cref="Quaternion.Slerp"/> is
19+
/// more processor intensive yet yields more precise results.
20+
/// </remarks>
21+
public bool IsSlerp;
22+
23+
/// <inheritdoc />
24+
protected override Quaternion InterpolateUnclamped(Quaternion start, Quaternion end, float time)
25+
{
26+
if (IsSlerp)
27+
{
28+
return Quaternion.SlerpUnclamped(start, end, time);
29+
}
30+
else
31+
{
32+
return Quaternion.LerpUnclamped(start, end, time);
33+
}
34+
}
35+
36+
/// <inheritdoc />
37+
protected override Quaternion Interpolate(Quaternion start, Quaternion end, float time)
38+
{
39+
if (IsSlerp)
40+
{
41+
return Quaternion.Slerp(start, end, time);
42+
}
43+
else
44+
{
45+
return Quaternion.Lerp(start, end, time);
46+
}
47+
}
48+
49+
/// <inheritdoc />
50+
protected internal override Quaternion SmoothDamp(Quaternion current, Quaternion target, ref Quaternion rateOfChange, float duration, float deltaTime, float maxSpeed = float.PositiveInfinity)
51+
{
52+
Vector3 currentEuler = current.eulerAngles;
53+
Vector3 targetEuler = target.eulerAngles;
54+
for (int i = 0; i < 3; i++)
55+
{
56+
var velocity = rateOfChange[i];
57+
currentEuler[i] = Mathf.SmoothDampAngle(currentEuler[i], targetEuler[i], ref velocity, duration, maxSpeed, deltaTime);
58+
rateOfChange[i] = velocity;
59+
}
60+
return Quaternion.Euler(currentEuler);
61+
}
62+
63+
protected internal override bool IsAproximately(Quaternion first, Quaternion second, float precision)
64+
{
65+
return Mathf.Abs(first.x - second.x) <= precision &&
66+
Mathf.Abs(first.y - second.y) <= precision &&
67+
Mathf.Abs(first.z - second.z) <= precision &&
68+
Mathf.Abs(first.w - second.w) <= precision;
69+
}
70+
71+
protected internal override Quaternion OnConvertTransformSpace(Transform transform, Quaternion rotation, bool inLocalSpace)
72+
{
73+
if (inLocalSpace)
74+
{
75+
return Quaternion.Inverse(transform.rotation) * rotation;
76+
}
77+
else
78+
{
79+
return transform.rotation * rotation;
80+
}
81+
}
82+
}
83+
}

com.unity.netcode.gameobjects/Runtime/Components/Interpolator/BufferedLinearInterpolatorQuaternion.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using UnityEngine;
2+
3+
namespace Unity.Netcode
4+
{
5+
/// <summary>
6+
/// A <see cref="BufferedLinearInterpolator{T}"/> <see cref="Vector3"/> implementation.
7+
/// </summary>
8+
public class BufferedLinearInterpolatorVector3 : BufferedLinearInterpolator<Vector3>
9+
{
10+
/// <summary>
11+
/// Use <see cref="Vector3.Slerp"/> when <see cref="true"/>.
12+
/// Use <see cref="Vector3.Lerp"/> when <see cref="false"/>
13+
/// </summary>
14+
public bool IsSlerp;
15+
/// <inheritdoc />
16+
protected override Vector3 InterpolateUnclamped(Vector3 start, Vector3 end, float time)
17+
{
18+
if (IsSlerp)
19+
{
20+
return Vector3.SlerpUnclamped(start, end, time);
21+
}
22+
else
23+
{
24+
return Vector3.LerpUnclamped(start, end, time);
25+
}
26+
}
27+
28+
/// <inheritdoc />
29+
protected override Vector3 Interpolate(Vector3 start, Vector3 end, float time)
30+
{
31+
if (IsSlerp)
32+
{
33+
return Vector3.Slerp(start, end, time);
34+
}
35+
else
36+
{
37+
return Vector3.Lerp(start, end, time);
38+
}
39+
}
40+
41+
/// <inheritdoc />
42+
protected internal override Vector3 OnConvertTransformSpace(Transform transform, Vector3 position, bool inLocalSpace)
43+
{
44+
if (inLocalSpace)
45+
{
46+
return transform.InverseTransformPoint(position);
47+
48+
}
49+
else
50+
{
51+
return transform.TransformPoint(position);
52+
}
53+
}
54+
55+
/// <inheritdoc />
56+
protected internal override bool IsAproximately(Vector3 first, Vector3 second, float precision = 0.0001F)
57+
{
58+
return Vector3.Distance(first, second) <= precision;
59+
}
60+
61+
/// <inheritdoc />
62+
protected internal override Vector3 SmoothDamp(Vector3 current, Vector3 target, ref Vector3 rateOfChange, float duration, float deltaTime, float maxSpeed)
63+
{
64+
if (IsAngularValue)
65+
{
66+
current.x = Mathf.SmoothDampAngle(current.x, target.x, ref rateOfChange.x, duration, maxSpeed, deltaTime);
67+
current.y = Mathf.SmoothDampAngle(current.y, target.y, ref rateOfChange.y, duration, maxSpeed, deltaTime);
68+
current.z = Mathf.SmoothDampAngle(current.z, target.z, ref rateOfChange.z, duration, maxSpeed, deltaTime);
69+
return current;
70+
}
71+
else
72+
{
73+
return Vector3.SmoothDamp(current, target, ref rateOfChange, duration, maxSpeed, deltaTime);
74+
}
75+
}
76+
}
77+
}

com.unity.netcode.gameobjects/Runtime/Components/Interpolator/BufferedLinearInterpolatorVector3.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)