Skip to content

Commit e47b73f

Browse files
authored
feat: NetworkAnimator and ClientNetworkAnimator (#1191)
* Split NetworkAnimator into Client and Server auth versions - extracted the abstract base-class NetworkAnimator - ClientNetworkAnimator lives in Samples folder and is overriding NetworkAnimator to show client-authority - ServerNetworkAnimator lives in Components and is server-controlled. - updated the test scene to use two versions of the components - optimized unnecessary LINQ usage that caused GC pressure + caching the values to avoid invoking LINQ repeatedly - added capability for NetworkAnimator to be late-initialized by means of TryInitialize(Animator animator) method - it would allow to choose the Mecanim Animator component to sync later than on object spawn. * This is a blank commit * removed servernetworkanimator * optimization pass * # * fixed NetowrkAnimator applying animatorstate to itself twice when when IsHost and dealing with ClientNetworkAnimator * reverted a logic change in the order in which the synced animator parameters are applied to the animator * standards.py fix * Serializer api changed - updated the code accordingly * Jeff's comments * Luke's comments 1 * yamato standards
1 parent 6181e7e commit e47b73f

File tree

12 files changed

+364
-140
lines changed

12 files changed

+364
-140
lines changed

com.unity.netcode.gameobjects/Components/NetworkAnimator.cs

Lines changed: 284 additions & 116 deletions
Large diffs are not rendered by default.

com.unity.netcode.gameobjects/Samples/ClientNetworkAnimator.meta

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

com.unity.netcode.gameobjects/Samples/ClientNetworkAnimator/Scripts.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "ClientNetworkAnimator",
3+
"rootNamespace": "",
4+
"references": [
5+
"GUID:1491147abca9d7d4bb7105af628b223e",
6+
"GUID:3b8ed52f1b5c64994af4c4e0aa4b6c4b"
7+
],
8+
"includePlatforms": [],
9+
"excludePlatforms": [],
10+
"allowUnsafeCode": false,
11+
"overrideReferences": false,
12+
"precompiledReferences": [],
13+
"autoReferenced": true,
14+
"defineConstraints": [],
15+
"versionDefines": [],
16+
"noEngineReferences": false
17+
}

com.unity.netcode.gameobjects/Samples/ClientNetworkAnimator/Scripts/ClientNetworkAnimator.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using UnityEngine;
2+
3+
namespace Unity.Netcode.Components
4+
{
5+
/// <summary>
6+
/// A prototype component for syncing Mecanim Animator state in a client-driven manner
7+
/// </summary>
8+
[AddComponentMenu("Netcode/" + nameof(ClientNetworkAnimator))]
9+
public class ClientNetworkAnimator : NetworkAnimator
10+
{
11+
public override bool CanCommitToAnimator => IsClient && IsOwner;
12+
}
13+
}

com.unity.netcode.gameobjects/Samples/ClientNetworkAnimator/Scripts/ClientNetworkAnimator.cs.meta

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

testproject/Assets/Tests/Manual/NetworkAnimatorTests/AnimatedCubeController.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ public override void OnNetworkSpawn()
2424
{
2525
enabled = false;
2626
}
27+
28+
transform.position += Vector3.up * NetworkObject.NetworkObjectId * 1.1f;
2729
}
2830

2931
private void Update()
3032
{
31-
if (m_NetworkAnimator.IsAuthorityOverAnimator)
33+
if (m_NetworkAnimator.CanCommitToAnimator)
3234
{
3335
if (Input.GetKeyDown(KeyCode.C))
3436
{

testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorTestPrefab.prefab

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ GameObject:
205205
- component: {fileID: 3078684836441782554}
206206
- component: {fileID: 3078684836448737212}
207207
- component: {fileID: 5295167410665083249}
208-
- component: {fileID: 1923420541903188985}
208+
- component: {fileID: 2947719363456079390}
209209
m_Layer: 0
210210
m_Name: NetworkAnimatedCube-Server
211211
m_TagString: Untagged
@@ -259,7 +259,7 @@ MonoBehaviour:
259259
m_Script: {fileID: 11500000, guid: b322be05414199349ae9d1aea28228a7, type: 3}
260260
m_Name:
261261
m_EditorClassIdentifier:
262-
--- !u!114 &1923420541903188985
262+
--- !u!114 &2947719363456079390
263263
MonoBehaviour:
264264
m_ObjectHideFlags: 0
265265
m_CorrespondingSourceObject: {fileID: 0}
@@ -271,7 +271,6 @@ MonoBehaviour:
271271
m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3}
272272
m_Name:
273273
m_EditorClassIdentifier:
274-
AnimatorAuthority: 0
275274
m_SendRate: 0.1
276275
m_Animator: {fileID: 3078684836448737212}
277276
--- !u!1 &3078684837583100501
@@ -285,7 +284,7 @@ GameObject:
285284
- component: {fileID: 3078684837582866037}
286285
- component: {fileID: 3078684837575715027}
287286
- component: {fileID: 5295167409644547614}
288-
- component: {fileID: 1923420540885290134}
287+
- component: {fileID: 3269142352356460003}
289288
m_Layer: 0
290289
m_Name: NetworkAnimatedCube-Owner
291290
m_TagString: Untagged
@@ -339,7 +338,7 @@ MonoBehaviour:
339338
m_Script: {fileID: 11500000, guid: b322be05414199349ae9d1aea28228a7, type: 3}
340339
m_Name:
341340
m_EditorClassIdentifier:
342-
--- !u!114 &1923420540885290134
341+
--- !u!114 &3269142352356460003
343342
MonoBehaviour:
344343
m_ObjectHideFlags: 0
345344
m_CorrespondingSourceObject: {fileID: 0}
@@ -348,10 +347,9 @@ MonoBehaviour:
348347
m_GameObject: {fileID: 3078684837583100501}
349348
m_Enabled: 1
350349
m_EditorHideFlags: 0
351-
m_Script: {fileID: 11500000, guid: e8d0727d5ae3244e3b569694d3912374, type: 3}
350+
m_Script: {fileID: 11500000, guid: f839a28093074169908367d71e143570, type: 3}
352351
m_Name:
353352
m_EditorClassIdentifier:
354-
AnimatorAuthority: 1
355353
m_SendRate: 0.1
356354
m_Animator: {fileID: 3078684837575715027}
357355
--- !u!1 &3214090167966542413
@@ -470,7 +468,7 @@ RectTransform:
470468
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
471469
m_AnchorMin: {x: 0, y: 0}
472470
m_AnchorMax: {x: 0, y: 0}
473-
m_AnchoredPosition: {x: 0, y: 0}
471+
m_AnchoredPosition: {x: 0, y: 3.14}
474472
m_SizeDelta: {x: 10, y: 10}
475473
m_Pivot: {x: 0.5, y: 0.5}
476474
--- !u!223 &3214090169133903738
@@ -612,7 +610,7 @@ MonoBehaviour:
612610
m_HorizontalOverflow: 0
613611
m_VerticalOverflow: 0
614612
m_LineSpacing: 1
615-
m_Text: Owner Authority
613+
m_Text: Client Authority
616614
--- !u!1 &3214090169675393154
617615
GameObject:
618616
m_ObjectHideFlags: 0

testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorEnhancement.unity renamed to testproject/Assets/Tests/Manual/NetworkAnimatorTests/NetworkAnimatorTestScene.unity

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ RenderSettings:
3838
m_ReflectionIntensity: 1
3939
m_CustomReflection: {fileID: 0}
4040
m_Sun: {fileID: 0}
41-
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
41+
m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641275, b: 0.5748172, a: 1}
4242
m_UseRadianceAmbientProbe: 0
4343
--- !u!157 &3
4444
LightmapSettings:
@@ -133,8 +133,8 @@ GameObject:
133133
m_Component:
134134
- component: {fileID: 57527693}
135135
- component: {fileID: 57527692}
136-
- component: {fileID: 57527691}
137136
- component: {fileID: 57527694}
137+
- component: {fileID: 57527691}
138138
m_Layer: 0
139139
m_Name: NetworkManager
140140
m_TagString: Untagged
@@ -151,11 +151,16 @@ MonoBehaviour:
151151
m_GameObject: {fileID: 57527690}
152152
m_Enabled: 1
153153
m_EditorHideFlags: 0
154-
m_Script: {fileID: 11500000, guid: fc5ef7b69296d69458910681f29471e6, type: 3}
154+
m_Script: {fileID: 11500000, guid: b84c2d8dfe509a34fb59e2b81f8e1319, type: 3}
155155
m_Name:
156156
m_EditorClassIdentifier:
157-
Port: 7777
158-
Address: 127.0.0.1
157+
MessageBufferSize: 5120
158+
MaxConnections: 100
159+
MaxSentMessageQueueSize: 128
160+
ConnectAddress: 127.0.0.1
161+
ConnectPort: 7777
162+
ServerListenPort: 7777
163+
MessageSendMode: 0
159164
--- !u!114 &57527692
160165
MonoBehaviour:
161166
m_ObjectHideFlags: 0
@@ -174,9 +179,6 @@ MonoBehaviour:
174179
NetworkConfig:
175180
ProtocolVersion: 0
176181
NetworkTransport: {fileID: 57527691}
177-
RegisteredScenes:
178-
- NetworkAnimatorEnhancement
179-
AllowRuntimeSceneChanges: 0
180182
PlayerPrefab: {fileID: 3214090169675393154, guid: 978fc8cd63a1294438ebf3b352814970,
181183
type: 3}
182184
NetworkPrefabs:
@@ -187,24 +189,19 @@ MonoBehaviour:
187189
type: 3}
188190
SourceHashToOverride: 0
189191
OverridingTargetPrefab: {fileID: 0}
190-
ReceiveTickrate: 64
191-
NetworkTickIntervalSec: 0.05
192-
MaxReceiveEventsPerTickRate: 500
193-
EventTickrate: 64
192+
TickRate: 30
194193
ClientConnectionBufferTimeout: 10
195194
ConnectionApproval: 0
196195
ConnectionData:
197196
EnableTimeResync: 0
198197
TimeResyncInterval: 30
199-
EnableNetworkVariable: 1
200198
EnsureNetworkVariableLengthSafety: 0
201199
EnableSceneManagement: 1
202200
ForceSamePrefabs: 1
203201
RecycleNetworkIds: 1
204202
NetworkIdRecycleDelay: 120
205203
RpcHashSize: 0
206204
LoadSceneTimeOut: 120
207-
EnableMessageBuffering: 1
208205
MessageBufferTimeout: 20
209206
EnableNetworkLogs: 1
210207
--- !u!4 &57527693

0 commit comments

Comments
 (0)