File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ using System . Collections . Generic ;
2+ using System . Linq ;
3+ using Unity . Netcode ;
4+ using UnityEngine ;
5+
6+ public class NetworkParentCentre : NetworkOwnerBehaviour
7+ {
8+ public NetworkVariable < ulong > OwnerId = new ( writePerm : NetworkVariableWritePermission . Owner ,
9+ readPerm : NetworkVariableReadPermission . Everyone ) ;
10+
11+ public List < NetworkParent > NetworkParents = new ( ) ;
12+
13+ protected override void OwnerNetworkSpawn ( )
14+ {
15+ if ( ! IsOwner ) return ;
16+ if ( transform . parent != null )
17+ {
18+ Debug . LogError (
19+ $ "Network Parent Centre: { transform . parent . name } | Can't have a parent (Must be a root object)") ;
20+ return ;
21+ }
22+
23+ NetworkParentCentre [ ] parentCentres = GetComponentsInChildren < NetworkParentCentre > ( ) ;
24+ if ( parentCentres . Length > 1 )
25+ {
26+ Debug . LogError (
27+ $ "Network Parent Centre: { transform . parent . name } | Can't have more than one Network Parent Centre on the same Network Object") ;
28+ return ;
29+ }
30+
31+ OwnerId . Value = NetworkManager . Singleton . LocalClientId ;
32+
33+ NetworkParents = GetComponentsInChildren < NetworkParent > ( ) . ToList ( ) ;
34+ }
35+
36+ public bool TryToParentNetworkObject ( NetworkObjectReference networkObjectReference , string networkParentId )
37+ {
38+ if ( ! IsOwner ) return false ;
39+
40+ NetworkParent networkParent = GetNetworkParent ( networkParentId ) ;
41+ if ( networkParent == null ) return false ;
42+
43+ networkParent . TriggerParenting ( networkObjectReference ) ;
44+ return true ;
45+ }
46+
47+ private NetworkParent GetNetworkParent ( string networkParentId )
48+ {
49+ return NetworkParents . Find ( x => x . NetworkParentId == networkParentId ) ;
50+ }
51+ }
You can’t perform that action at this time.
0 commit comments