Skip to content

Commit d0fd89c

Browse files
using local networktransform sync when picked up, logic on dropping item on death
1 parent e7acee6 commit d0fd89c

File tree

10 files changed

+199
-14
lines changed

10 files changed

+199
-14
lines changed

Assets/Prefabs/Character/PlayerAvatar.prefab

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,34 @@ MonoBehaviour:
366366
m_Name:
367367
m_EditorClassIdentifier:
368368
m_FeedbackPrefab: {fileID: 9137928905311479176, guid: 5d22c1d86e0e5604cbe14004bf924827, type: 3}
369+
--- !u!114 &1344358136560354212
370+
MonoBehaviour:
371+
m_ObjectHideFlags: 0
372+
m_CorrespondingSourceObject: {fileID: 0}
373+
m_PrefabInstance: {fileID: 0}
374+
m_PrefabAsset: {fileID: 0}
375+
m_GameObject: {fileID: 6009713983291384756}
376+
m_Enabled: 1
377+
m_EditorHideFlags: 0
378+
m_Script: {fileID: 11500000, guid: c00eb062d450d8345abcc50f017109a3, type: 3}
379+
m_Name:
380+
m_EditorClassIdentifier:
381+
heldObject:
382+
m_InternalValue: 0
383+
--- !u!114 &6387032110594377642
384+
MonoBehaviour:
385+
m_ObjectHideFlags: 0
386+
m_CorrespondingSourceObject: {fileID: 0}
387+
m_PrefabInstance: {fileID: 0}
388+
m_PrefabAsset: {fileID: 0}
389+
m_GameObject: {fileID: 6009713983291384756}
390+
m_Enabled: 1
391+
m_EditorHideFlags: 0
392+
m_Script: {fileID: 11500000, guid: 0e59f6113deae61408ad63553733ed77, type: 3}
393+
m_Name:
394+
m_EditorClassIdentifier:
395+
m_NetworkLifeState: {fileID: 6173771494986166194}
396+
m_NetworkPickUpState: {fileID: 1344358136560354212}
369397
--- !u!4 &6009713983291384766 stripped
370398
Transform:
371399
m_CorrespondingSourceObject: {fileID: 4600110157238723791, guid: 0d2d836e2e83b754fa1a1c4022d6d65d, type: 3}

Assets/Prefabs/Game/PickUpPot.prefab

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ MonoBehaviour:
117117
m_Script: {fileID: 11500000, guid: 19d305a23aab66843ab49f61511c8662, type: 3}
118118
m_Name:
119119
m_EditorClassIdentifier:
120-
m_PositionConstraint: {fileID: 172480899766740213}
121120
m_NetworkTransform: {fileID: -6910049848596396308}
121+
m_PositionConstraint: {fileID: 172480899766740213}
122122
--- !u!1818360608 &172480899766740213
123123
PositionConstraint:
124124
m_ObjectHideFlags: 0

Assets/Prefabs/Game/StaticNetworkObjects/EntranceStaticNetworkObjects.prefab

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Transform:
6969
- {fileID: 6678085809358300456}
7070
- {fileID: 4544943714861995960}
7171
- {fileID: 2531036117351469622}
72+
- {fileID: 966100128128837971}
7273
m_Father: {fileID: 0}
7374
m_RootOrder: 0
7475
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -2566,6 +2567,72 @@ Transform:
25662567
m_CorrespondingSourceObject: {fileID: 4505851899529102149, guid: 5640f51641faec24ca0d332b154499bf, type: 3}
25672568
m_PrefabInstance: {fileID: 1461238781263960568}
25682569
m_PrefabAsset: {fileID: 0}
2570+
--- !u!1001 &1770379369737455379
2571+
PrefabInstance:
2572+
m_ObjectHideFlags: 0
2573+
serializedVersion: 2
2574+
m_Modification:
2575+
m_TransformParent: {fileID: 6690190851420380261}
2576+
m_Modifications:
2577+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2578+
propertyPath: m_RootOrder
2579+
value: 41
2580+
objectReference: {fileID: 0}
2581+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2582+
propertyPath: m_LocalPosition.x
2583+
value: 5.93
2584+
objectReference: {fileID: 0}
2585+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2586+
propertyPath: m_LocalPosition.y
2587+
value: 0
2588+
objectReference: {fileID: 0}
2589+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2590+
propertyPath: m_LocalPosition.z
2591+
value: -5.31
2592+
objectReference: {fileID: 0}
2593+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2594+
propertyPath: m_LocalRotation.w
2595+
value: 1
2596+
objectReference: {fileID: 0}
2597+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2598+
propertyPath: m_LocalRotation.x
2599+
value: 0
2600+
objectReference: {fileID: 0}
2601+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2602+
propertyPath: m_LocalRotation.y
2603+
value: 0
2604+
objectReference: {fileID: 0}
2605+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2606+
propertyPath: m_LocalRotation.z
2607+
value: 0
2608+
objectReference: {fileID: 0}
2609+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2610+
propertyPath: m_LocalEulerAnglesHint.x
2611+
value: 0
2612+
objectReference: {fileID: 0}
2613+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2614+
propertyPath: m_LocalEulerAnglesHint.y
2615+
value: 0
2616+
objectReference: {fileID: 0}
2617+
- target: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2618+
propertyPath: m_LocalEulerAnglesHint.z
2619+
value: 0
2620+
objectReference: {fileID: 0}
2621+
- target: {fileID: 1583543423304314434, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2622+
propertyPath: m_Name
2623+
value: PickUpPot
2624+
objectReference: {fileID: 0}
2625+
- target: {fileID: 1583543423304314435, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2626+
propertyPath: GlobalObjectIdHash
2627+
value: 951099334
2628+
objectReference: {fileID: 0}
2629+
m_RemovedComponents: []
2630+
m_SourcePrefab: {fileID: 100100000, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2631+
--- !u!4 &966100128128837971 stripped
2632+
Transform:
2633+
m_CorrespondingSourceObject: {fileID: 1583543423304314432, guid: 4c1a321755b60c54099d0402be05fa2e, type: 3}
2634+
m_PrefabInstance: {fileID: 1770379369737455379}
2635+
m_PrefabAsset: {fileID: 0}
25692636
--- !u!1001 &2136970794970419571
25702637
PrefabInstance:
25712638
m_ObjectHideFlags: 0
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:5f5bf003d276c90138d9d4c997c7a30d52ecfbd54daba98365611fe30a5d507b
3-
size 29658
2+
oid sha256:be9e5781214b67b2bf1ba80d5ccc397eaaa0aa595dac6cc6614b3a45185b7e39
3+
size 29847

Assets/Scripts/Gameplay/Action/PickUpAction.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using Unity.Multiplayer.Samples.BossRoom.Client;
23
using Unity.Netcode;
34
using UnityEngine;
@@ -11,7 +12,7 @@ namespace Unity.Multiplayer.Samples.BossRoom.Server
1112
/// </summary>
1213
public class PickUpAction : Action
1314
{
14-
RaycastHit[] m_RaycastHits = new RaycastHit[1];
15+
RaycastHit[] m_RaycastHits = new RaycastHit[8];
1516

1617
const string k_HeavyTag = "Heavy";
1718

@@ -23,18 +24,22 @@ public class PickUpAction : Action
2324

2425
float m_AnimationTimer;
2526

26-
PickUpState m_PickUpObject;
27+
NetworkPickUpState m_NetworkPickUpState;
28+
29+
static RaycastHitComparer s_RaycastHitComparer;
2730

2831
public PickUpAction(ServerCharacter parent, ref ActionRequestData data) : base(parent, ref data)
2932
{
33+
m_NetworkPickUpState = parent.GetComponent<NetworkPickUpState>();
34+
35+
s_RaycastHitComparer ??= new RaycastHitComparer();
3036
}
3137

3238
public override bool Start()
3339
{
34-
m_PickUpObject = m_Parent.GetComponentInChildren<PickUpState>();
35-
36-
// first, check if a pot has already been parented; if so, drop it
37-
if (m_PickUpObject)
40+
// play animation based on if a heavy object is already held and start timer
41+
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(m_NetworkPickUpState.heldObject.Value,
42+
out var heldObject))
3843
{
3944
Data.TargetIds = null;
4045

@@ -70,21 +75,23 @@ public override bool Start()
7075

7176
void PickUpOrDrop()
7277
{
73-
if (m_PickUpObject)
78+
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(m_NetworkPickUpState.heldObject.Value,
79+
out var heldObject))
7480
{
7581
// pickup object found inside of hierarchy; drop it
76-
m_PickUpObject.transform.SetParent(null);
82+
m_NetworkPickUpState.heldObject.Value = 0;
83+
heldObject.transform.SetParent(null);
7784
return;
7885
}
7986

80-
var numResults = Physics.BoxCastNonAlloc(m_Parent.physicsWrapper.Transform.position,
81-
m_Parent.physicsWrapper.DamageCollider.bounds.extents,
87+
var numResults = Physics.RaycastNonAlloc(m_Parent.physicsWrapper.Transform.position,
8288
m_Parent.physicsWrapper.Transform.forward,
8389
m_RaycastHits,
84-
Quaternion.identity,
8590
Description.Range,
8691
1 << LayerMask.NameToLayer(k_NpcLayer));
8792

93+
Array.Sort(m_RaycastHits, 0, numResults, s_RaycastHitComparer);
94+
8895
// collider must contain "Heavy" tag
8996
if (numResults == 0 || !m_RaycastHits[0].collider.TryGetComponent(out NetworkObject heavyNetworkObject) ||
9097
!m_RaycastHits[0].collider.gameObject.CompareTag(k_HeavyTag))
@@ -109,6 +116,8 @@ void PickUpOrDrop()
109116
return;
110117
}
111118

119+
m_NetworkPickUpState.heldObject.Value = heavyNetworkObject.NetworkObjectId;
120+
112121
Data.TargetIds = new ulong[] { heavyNetworkObject.NetworkObjectId };
113122

114123
// clear current target on successful parenting attempt
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Unity.Netcode;
2+
using UnityEngine;
3+
4+
namespace Unity.Multiplayer.Samples.BossRoom
5+
{
6+
public class NetworkPickUpState : NetworkBehaviour
7+
{
8+
public NetworkVariable<ulong> heldObject;
9+
}
10+
}

Assets/Scripts/Gameplay/GameplayObjects/NetworkPickUpState.cs.meta

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

Assets/Scripts/Gameplay/GameplayObjects/ServerDisplacerOnParentChange.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public override void OnNetworkObjectParentChanged(NetworkObject parentNetworkObj
4545
{
4646
StopAllCoroutines();
4747

48+
m_NetworkTransform.InLocalSpace = false;
49+
4850
// when Netcode detects that a NetworkObject's parent has been destroyed, it assigns no parent for that
4951
// object
5052
// when this happens, NetworkTransform and PositionConstraint are disabled; here they are re-enabled
@@ -54,6 +56,10 @@ public override void OnNetworkObjectParentChanged(NetworkObject parentNetworkObj
5456
// this NetworkObject has been dropped, move it slowly back to the ground
5557
StartCoroutine(SmoothPositionLerpY(k_DropAnimationLength, 0));
5658
}
59+
else
60+
{
61+
m_NetworkTransform.InLocalSpace = true;
62+
}
5763
}
5864

5965
void RemoveParentConstraintSources()
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using Unity.Netcode;
2+
using UnityEngine;
3+
4+
namespace Unity.Multiplayer.Samples.BossRoom.Server
5+
{
6+
[RequireComponent(typeof(NetworkPickUpState), typeof(NetworkLifeState))]
7+
public class ServerDropItemOnFaint : NetworkBehaviour
8+
{
9+
[SerializeField]
10+
NetworkLifeState m_NetworkLifeState;
11+
12+
[SerializeField]
13+
NetworkPickUpState m_NetworkPickUpState;
14+
15+
public override void OnNetworkSpawn()
16+
{
17+
if (!IsServer)
18+
{
19+
enabled = false;
20+
return;
21+
}
22+
23+
m_NetworkLifeState.LifeState.OnValueChanged += OnValueChanged;
24+
}
25+
26+
public override void OnNetworkDespawn()
27+
{
28+
m_NetworkLifeState.LifeState.OnValueChanged -= OnValueChanged;
29+
}
30+
31+
void OnValueChanged(LifeState previousValue, LifeState newValue)
32+
{
33+
if (newValue == LifeState.Fainted)
34+
{
35+
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(m_NetworkPickUpState.heldObject.Value, out var heavyNetworkObject))
36+
{
37+
m_NetworkPickUpState.heldObject.Value = 0;
38+
heavyNetworkObject.transform.SetParent(null);
39+
}
40+
}
41+
}
42+
}
43+
}

Assets/Scripts/Gameplay/GameplayObjects/ServerDropItemOnFaint.cs.meta

Lines changed: 11 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)