From b21cb08db45e82dc54358de611d72bde94dbe940 Mon Sep 17 00:00:00 2001 From: Karrar Date: Fri, 28 Feb 2025 00:28:53 +0300 Subject: [PATCH] Added `PlayerSpawner`, a helper script for quick prototyping, used to spawn/despawn a player prefab when a player (client or host) has connected/disconnected. --- Netick/Editor/Netick.Unity.Editor.dll | Bin 64512 -> 64512 bytes Netick/Editor/Netick.Unity.Pro.Editor.dll | Bin 8192 -> 8192 bytes Netick/Editor/Unity.Netick.CodeGen.dll | Bin 24064 -> 24064 bytes Netick/Runtime/Netick.Unity.Pro.dll | Bin 18432 -> 18432 bytes Netick/Runtime/Netick.Unity.dll | Bin 136704 -> 136704 bytes Scripts/PlayerSpawner.cs | 37 ++++++++++++++++++++++ Scripts/PlayerSpawner.cs.meta | 11 +++++++ package.json | 2 +- 8 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 Scripts/PlayerSpawner.cs create mode 100644 Scripts/PlayerSpawner.cs.meta diff --git a/Netick/Editor/Netick.Unity.Editor.dll b/Netick/Editor/Netick.Unity.Editor.dll index e21669c6504acab7ed262141f8d748956caa7c57..4cfe483e2b7f9a665153cbf16f72e47631bb855e 100644 GIT binary patch delta 114 zcmZqp!QAkJc|r%vebwyljXn2{GMa79KDLla;A$~D_sPePyn3hT2PN;R4%jSnQb3ud zW-im&$p&u%1WHp~{BBsw`%UBG5Sh&vv2XH(H>C)^(o2|@ysg6^%zU9iW0SLpg_c3;jM*{mbHgNdc+!iyi1Ux)?> zEPAqF)&0w@P7TwyZ};7D*KV?hSfv6~FbF0HQhlRq{mXVeds+5>>pC|-6qDx!085NF Az5oCK delta 105 zcmZp0XmFU&!SZqItOpx=CI|`SiWuJf$a&DYTS?aZz?$``n{|YDFtJRXV|8fq3()|9 zgTeb5I@jKC?0&i9;Q1#Eb0&L;RVqLQ8M&c?Ak}fAVg-*`ZNt>p-sRf-P)wc^02i(> AHvj+t diff --git a/Netick/Editor/Unity.Netick.CodeGen.dll b/Netick/Editor/Unity.Netick.CodeGen.dll index 3fe6db9a9dc2e0fc94bca867195211aeb8cd8e7b..dab5a5c5c912dc7bfa10057effb5e3e10b28915a 100644 GIT binary patch delta 107 zcmZqJ!`QHgaY6@+Uenp-8+$%@3RrVKd&zw?(tFEX>u1r+3ifX9@p{0{!v2O~{p5n6 z0D&b8p4X1EIC`y~o@LLNr1N0%g`hG8sNk+_s31_aez$}Yhj)AB#P!`Cnw!&tXK?`l D_Yf@_ delta 107 zcmZqJ!`QHgaY6@6WYXKO8+$%@3VgQ>%VriA^_es)f1{z%hv>~cUJuw=q6D6-np_YR zAP~)-_t{ZR&1JUE?)mQ1y-!cR5LBiB6%2`n3IbJYg_q1+8@}(gM((>@&&_GUv$z1p C$}WTe diff --git a/Netick/Runtime/Netick.Unity.Pro.dll b/Netick/Runtime/Netick.Unity.Pro.dll index f3e0517f5c71f8f095ed57652870bfa0f585e42e..5d025dd87539d79266db01728d7014b4239195d3 100644 GIT binary patch delta 70 zcmZpez}PT>aY6@+_buhO8+#^L3f$}9KT@!|#&K=^&AmKd#e6sGSY2TSOHXETFu|1e IaM-~P09K|SH~;_u delta 70 zcmZpez}PT>aY6^nyRRSjZtR(0DR9GS>Pwfsz8*78E+{qs4CvadV|9fUEIpaU!30y< I!(j(I0M7~{2mk;8 diff --git a/Netick/Runtime/Netick.Unity.dll b/Netick/Runtime/Netick.Unity.dll index cd1d6720a2cc0c6a0714fc46674825f4dd394944..14bbc2deb35c3204fbd9099e7f65a05fc48c89f7 100644 GIT binary patch delta 122 zcmZoz!_lyYV?qbZJh_kqjXhg?7*!4m)NNo`wvcmz&t8WW7yeoOT)+LmLB=pqMzihW z*BSpRvy|PsyKcI~Z^i(D<(5AASIxuxI)7Az-LZ?*n_lsoF;4+18g~*Z3RJJx=JJ(i Te*T6PH{aiUw4Ln_<1a}7R5Cga delta 122 zcmZoz!_lyYV?qbZq0g+38hf_(Fsd9B5NNtkwDHtbzxKe121VT2Oxq6}WDFB!G~F(K zo$;?SOZY#>Ez>1_GX@CA&Y!})`sXS4)z=?>wK%i##Po{ajCl$$QEjLwNPY9!uWSE4 SUjO}e>O1}IY=0PkNdf?(qdn39 diff --git a/Scripts/PlayerSpawner.cs b/Scripts/PlayerSpawner.cs new file mode 100644 index 0000000..065aee5 --- /dev/null +++ b/Scripts/PlayerSpawner.cs @@ -0,0 +1,37 @@ +using Netick; +using Netick.Unity; +using UnityEngine; + +/// +/// This is a helper script for quick prototyping, used to spawn/despawn a player prefab when a player (client or host) has connected/disconnected. +/// +[AddComponentMenu("Netick/Player Spawner")] +public class PlayerSpawner : NetworkEventsListener +{ + public GameObject PlayerPrefab; + public Transform SpawnPosition; + public float HorizontalOffset = 5f; + public bool StaggerSpawns = true; + public bool DestroyPlayerObjectWhenLeaving = true; + + // This is called on the server when a player has connected. + public override void OnPlayerConnected(NetworkSandbox sandbox, Netick.NetworkPlayer client) + { + var spawnPos = SpawnPosition.position; + if (StaggerSpawns) + spawnPos += (HorizontalOffset * Vector3.left) * (1 + sandbox.ConnectedPlayers.Count); + var player = sandbox.NetworkInstantiate(PlayerPrefab, spawnPos, SpawnPosition.rotation, client); + client.PlayerObject = player; + } + + // This is called on the server when a player has disconnected. + public override void OnPlayerDisconnected(NetworkSandbox sandbox, Netick.NetworkPlayer client, TransportDisconnectReason transportDisconnectReason) + { + if (!DestroyPlayerObjectWhenLeaving) + return; + + var netObj = client.PlayerObject as NetworkObject; + if (netObj != null) + Sandbox.Destroy(netObj); + } +} \ No newline at end of file diff --git a/Scripts/PlayerSpawner.cs.meta b/Scripts/PlayerSpawner.cs.meta new file mode 100644 index 0000000..ea14840 --- /dev/null +++ b/Scripts/PlayerSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13d95c28de1bac54f8b26fc8dd960077 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json index 2e9a90f..7d8dfe0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.karrar.netick", - "version": "0.13.15", + "version": "0.13.16", "displayName": "Netick", "description": "A networking solution for Unity", "unity": "2021.3",