From cf86396d4bf95329d573a9348749d1f6d7435293 Mon Sep 17 00:00:00 2001 From: Nietod Date: Thu, 4 Sep 2025 11:15:45 +0200 Subject: [PATCH 1/4] Removed double space Removed double space in the main file of the docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96b6265..a2973c8 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ We needed a networking library that allows us to [**launch our games**](https:// ## Unity Versions -We will follow Unity's support for **LTS releases**. Any version beyond those may work, but you're on your own, especially with regard to preview / beta versions. +We will follow Unity's support for **LTS releases**. Any version beyond those may work, but you're on your own, especially with regard to preview / beta versions. At the moment, we recommend using Unity 2020 or 2021 LTS releases. From d75ebef58a27cbf84262d97d22a415adc7e1e19e Mon Sep 17 00:00:00 2001 From: Nietod <119692307+Nietod@users.noreply.github.com> Date: Tue, 3 Feb 2026 00:35:45 +0100 Subject: [PATCH 2/4] Small Grammar Change + Changed Dot to no longer be bold --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a2973c8..b540c08 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ We needed a networking library that allows us to [**launch our games**](https:// * Five flavors of [**Interest Management**](manual/interest-management/), and you can make your own custom version. * Support for [**Additive Scenes**](manual/examples/) with Physics Isolation (battle instances, levels, etc.) * Several complete [**Examples**](manual/examples/) included. -* Constant improvements and enhancements [**every month**](manual/general/changelog/)**.** -* Full time support available in our [**Discord**](https://discord.gg/2BvnM4R). +* Constant improvements and enhancements [**every month**](manual/general/changelog/). +* Full time support available on our [**Discord**](https://discord.gg/2BvnM4R). ## Unity Versions From b21f2c6201d9f8efa5655e71d309200c571f3455 Mon Sep 17 00:00:00 2001 From: Nietod <119692307+Nietod@users.noreply.github.com> Date: Thu, 16 Apr 2026 19:58:43 +0200 Subject: [PATCH 3/4] revert: grammar change Such grammar change should be done at a whole project scope and not in just one single file. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b540c08..d0f2921 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ We needed a networking library that allows us to [**launch our games**](https:// * Support for [**Additive Scenes**](manual/examples/) with Physics Isolation (battle instances, levels, etc.) * Several complete [**Examples**](manual/examples/) included. * Constant improvements and enhancements [**every month**](manual/general/changelog/). -* Full time support available on our [**Discord**](https://discord.gg/2BvnM4R). +* Full time support available in our [**Discord**](https://discord.gg/2BvnM4R). ## Unity Versions From 07758f22bb70c3060d83791b051b5cc4f1d4d79c Mon Sep 17 00:00:00 2001 From: Nietod <119692307+Nietod@users.noreply.github.com> Date: Thu, 16 Apr 2026 22:21:36 +0200 Subject: [PATCH 4/4] style: remove double spaces in remaining files Only removed where it was not needed because of context. --- community-guides/ios-appstore-udp.md | 2 +- community-guides/quick-start-guide.md | 2 +- community-guides/ready-up-and-die.md | 2 +- community-guides/video-tutorials.md | 2 +- hosting/edgegap-hosting-plugin-guide.md | 2 +- hosting/server-hosting/aws.md | 2 +- .../network-authenticators/README.md | 4 ++-- manual/components/network-discovery.md | 4 ++-- manual/components/network-manager.md | 2 +- manual/examples/additive-levels.md | 2 +- manual/examples/basic.md | 2 +- manual/examples/room.md | 8 +++---- manual/general/changelog/2021-change-log.md | 22 +++++++++---------- manual/general/changelog/2022-change-log.md | 8 +++---- manual/general/changelog/2023-change-log.md | 2 +- manual/general/deprecations.md | 2 +- manual/general/history-bounds.md | 2 +- manual/general/lag-compensation.md | 2 +- manual/general/migration-guide.md | 6 ++--- manual/general/tests.md | 2 +- manual/general/timestamp-batching.md | 2 +- manual/guides/data-types.md | 2 +- manual/interest-management/custom.md | 4 ++-- manual/interest-management/distance.md | 4 ++-- manual/interest-management/scene.md | 12 +++++----- manual/interest-management/spatial-hashing.md | 2 +- manual/interest-management/team.md | 2 +- manual/transports/multiplex-transport.md | 2 +- .../reverse-proxy/linux/nginx.md | 4 ++-- .../reverse-proxy/linux/nginx_updated.md | 4 ++-- .../reverse-proxy/windows/iis.md | 6 ++--- 31 files changed, 62 insertions(+), 62 deletions(-) diff --git a/community-guides/ios-appstore-udp.md b/community-guides/ios-appstore-udp.md index c980ac5..1105b81 100644 --- a/community-guides/ios-appstore-udp.md +++ b/community-guides/ios-appstore-udp.md @@ -20,7 +20,7 @@ Add it to the app provisioning, then add the capability to the app itself, makin Latest versions may need this: Add NSLocalNetworkUsageDescription to the info.plist. \ -Note: If LAN Broadcasting does not work, try another address, for example, change 0.0.0.0 to 255.255.255.255 (remember to rebuild after changing) +Note: If LAN Broadcasting does not work, try another address, for example, change 0.0.0.0 to 255.255.255.255 (remember to rebuild after changing). This should get Network Discovery features working, Kudos to overmatch-iman, Sylvain and other Discord users for reporting back the working steps. diff --git a/community-guides/quick-start-guide.md b/community-guides/quick-start-guide.md index c1d2fa7..a4b609f 100644 --- a/community-guides/quick-start-guide.md +++ b/community-guides/quick-start-guide.md @@ -684,7 +684,7 @@ void CmdShootRay() [ClientRpc] void RpcFireWeapon() { - //bulletAudio.Play(); muzzleflash etc + //bulletAudio.Play(); muzzleflash etc. GameObject bullet = Instantiate(activeWeapon.weaponBullet, activeWeapon.weaponFirePosition.position, activeWeapon.weaponFirePosition.rotation); bullet.GetComponent().velocity = bullet.transform.forward * activeWeapon.weaponSpeed; Destroy(bullet, activeWeapon.weaponLife); diff --git a/community-guides/ready-up-and-die.md b/community-guides/ready-up-and-die.md index d6efdec..bcef69b 100644 --- a/community-guides/ready-up-and-die.md +++ b/community-guides/ready-up-and-die.md @@ -213,7 +213,7 @@ void Awake() public override void OnStartLocalPlayer() { // local player sets reference to scene scripts variable, so they can communicate with each other - // you could also use regular Start() and if( isLocalPlayer ) { } instead of OnStartLocalPlayer() + // you could also use regular Start() and if( isLocalPlayer ) { } instead of OnStartLocalPlayer() sceneScript.playerScript = this; sceneScript.SetupScene(); } diff --git a/community-guides/video-tutorials.md b/community-guides/video-tutorials.md index b2cfbe0..abdc65d 100644 --- a/community-guides/video-tutorials.md +++ b/community-guides/video-tutorials.md @@ -20,4 +20,4 @@ * [**Recreating 'Among Us' by Lignus**](https://www.youtube.com/watch?v=j5ja-pKz05A) **-** A tutorial using Unity and Mirror to recreate the famous game. \ -(Tip: Do not speak these Languages? Set Youtube captions to on, and Auto Translate -> Your Language) +(Tip: Do not speak these Languages? Set Youtube captions to on, and Auto Translate -> Your Language) diff --git a/hosting/edgegap-hosting-plugin-guide.md b/hosting/edgegap-hosting-plugin-guide.md index 85d10d9..203d541 100644 --- a/hosting/edgegap-hosting-plugin-guide.md +++ b/hosting/edgegap-hosting-plugin-guide.md @@ -137,7 +137,7 @@ Return to the plugin and select **Build Server** to start the build process. You **3. Containerize your Game Server** -First, make sure Docker is running by selecting **Validate**. You should see “Docker is running” in green. +First, make sure Docker is running by selecting **Validate**. You should see “Docker is running” in green. While you may want to change the image name, build path, and tags in the future, we recommend skipping this entirely and select **Containerize with Docker** button to start the containerization process. diff --git a/hosting/server-hosting/aws.md b/hosting/server-hosting/aws.md index 4f0169a..857a9ff 100644 --- a/hosting/server-hosting/aws.md +++ b/hosting/server-hosting/aws.md @@ -73,7 +73,7 @@ Nothing has to be changed. Keep it default. Click on **"Next: Configure Security Create a new security group and you can give it your own name and description. Add the following rules: * RDP with source "Anywhere", Description can be whatever but put it as Remote Desktop Program. -* Custom TCP Rule with port 7777 and source "Anywhere", Description can be whatever but put it as Mirror. (If KCP is on your NetworkManager, unblock UDP, not TCP) +* Custom TCP Rule with port 7777 and source "Anywhere", Description can be whatever but put it as Mirror. (If KCP is on your NetworkManager, unblock UDP, not TCP) * SSH with source "Anywhere", Description can be whatever but put it as SSH. SSH is not strictly necessary but can be used to remote connect to it through other means than the RDP. diff --git a/manual/components/network-authenticators/README.md b/manual/components/network-authenticators/README.md index 7791043..643ed09 100644 --- a/manual/components/network-authenticators/README.md +++ b/manual/components/network-authenticators/README.md @@ -12,7 +12,7 @@ When you have a multiplayer game, often you need to store information about your ## Encryption Notice -Few of the available transports support encryption, so if you want to do authentication through Mirror, we highly recommend you use a transport that does, e.g. [SimpleWebSocket ](https://mirror-networking.gitbook.io/docs/transports/websockets-transport)Transport, or carry out your exchange of sensitive data using UnityWebRequest with a service over HTTPS. This can be done inside an Authenticator, or before calling `StartClient`. +Few of the available transports support encryption, so if you want to do authentication through Mirror, we highly recommend you use a transport that does, e.g. [SimpleWebSocket ](https://mirror-networking.gitbook.io/docs/transports/websockets-transport)Transport, or carry out your exchange of sensitive data using UnityWebRequest with a service over HTTPS. This can be done inside an Authenticator, or before calling `StartClient`. ## Offline / Online Scenes @@ -20,7 +20,7 @@ Authentication takes place in the Offline scene, and messages are exchanged with ## Persisting Data -`NetworkConnection` has an **`authenticationData`** property of type `Object` that can be set to pretty much anything you need, such as account id's, tokens, character selection, etc., including a struct of data, on the server and/or client during the authentication process. That data is available everywhere else in Mirror where you have the client's `NetworkConnection`...just cast it back to whatever type you put into it. +`NetworkConnection` has an **`authenticationData`** property of type `Object` that can be set to pretty much anything you need, such as account id's, tokens, character selection, etc., including a struct of data, on the server and/or client during the authentication process. That data is available everywhere else in Mirror where you have the client's `NetworkConnection`...just cast it back to whatever type you put into it. ## Built-in Authenticators diff --git a/manual/components/network-discovery.md b/manual/components/network-discovery.md index 3fd25e5..9d98b25 100644 --- a/manual/components/network-discovery.md +++ b/manual/components/network-discovery.md @@ -96,7 +96,7 @@ public class NewNetworkDiscovery: NetworkDiscoveryBase protected override DiscoveryResponse ProcessRequest(DiscoveryRequest request, IPEndPoint endpoint) { - // TODO: Create your response and return it + // TODO: Create your response and return it return new DiscoveryResponse(); } @@ -111,7 +111,7 @@ public class NewNetworkDiscovery: NetworkDiscoveryBase protected override void ProcessResponse(DiscoveryResponse response, IPEndPoint endpoint) { - // TODO: a server replied, do something with the response such as invoking a unityevent + // TODO: a server replied, do something with the response such as invoking a unityevent } #endregion diff --git a/manual/components/network-manager.md b/manual/components/network-manager.md index 50b4d16..7dbee0c 100644 --- a/manual/components/network-manager.md +++ b/manual/components/network-manager.md @@ -1,6 +1,6 @@ # Network Manager -The Network Manager is a component for managing the networking aspects of a multiplayer game. It wraps up a lot of useful functionality into a single place, and makes creating, running and debugging multiplayer games as simple as possible. +The Network Manager is a component for managing the networking aspects of a multiplayer game. It wraps up a lot of useful functionality into a single place, and makes creating, running and debugging multiplayer games as simple as possible. The Network Manager features include: diff --git a/manual/examples/additive-levels.md b/manual/examples/additive-levels.md index 208195b..0512845 100644 --- a/manual/examples/additive-levels.md +++ b/manual/examples/additive-levels.md @@ -29,7 +29,7 @@ Next, add a Player and Portal Layer to Project Settings under Tags and Layers: Finally, open the Offline scene, and click Play in the editor, and click Host in the HUD. * Player controls are WASD+QE to move and turn. -* Move into the Portal in the corner with a scene label over it. Your player will be changed to the other level scene. +* Move into the Portal in the corner with a scene label over it. Your player will be changed to the other level scene. * Move into the Portal in the corner of the 2nd scene, and your player will be changed back to the first scene If you make a build and start two or more instances (one as Host or Server, the other(s) as clients, and move each one, you'll see that only players in the same level can see and collide with each other. diff --git a/manual/examples/basic.md b/manual/examples/basic.md index c02ee84..ee9947d 100644 --- a/manual/examples/basic.md +++ b/manual/examples/basic.md @@ -40,4 +40,4 @@ public event System.Action OnPlayerColorChanged; public event System.Action OnPlayerDataChanged; ``` -When the Player object is spawned on the client, a `PlayerUI` is instantiated as a child of the `PlayersPanel` in the Canvas via the references provided in the `CanvasUI` script, and the `SetPlayer` method is called with the corresponding Player script reference. The `PlayerUI` script subscribes to the events above, and updates its UI elements as the `SyncVars` are updated from the server. +When the Player object is spawned on the client, a `PlayerUI` is instantiated as a child of the `PlayersPanel` in the Canvas via the references provided in the `CanvasUI` script, and the `SetPlayer` method is called with the corresponding Player script reference. The `PlayerUI` script subscribes to the events above, and updates its UI elements as the `SyncVars` are updated from the server. diff --git a/manual/examples/room.md b/manual/examples/room.md index 4ffb330..8af91c6 100644 --- a/manual/examples/room.md +++ b/manual/examples/room.md @@ -11,7 +11,7 @@ The hotel staff gets annoyed if you party in the Lobby, they'll tell you to get Mirror's Room system is intended to be the "next step" after a separate Lobby service, typically a master server with match making and game server launching features. {% hint style="warning" %} -Note that Mirror's Room system is not designed to allow late joiners / spectators once the game has started. If you need these features, you're better off making your game based on Additive Scenes instead. +Note that Mirror's Room system is not designed to allow late joiners / spectators once the game has started. If you need these features, you're better off making your game based on Additive Scenes instead. {% endhint %} ## Initial Setup @@ -26,7 +26,7 @@ The typical setup involves 3 scenes: To make your own game with the Room system, we have [Script Templates](../general/script-templates.md) to get you started. {% endhint %} -1. Create 3 empty scenes: Offline, Room, Game. You can use your own game scene for Game scene if you already have one. +1. Create 3 empty scenes: Offline, Room, Game. You can use your own game scene for Game scene if you already have one. 2. In both the Offline and Room scenes, delete the Directional Light, and change the Clear Flags setting in the Main Camera to Solid Color (to make the default UI easier to see). 3. From the Script Templates, create your own Network Room Manager and Network Room Player scripts. 4. In the Offline scene, create an empty game object called `RoomPlayer` and attach the Network Room Player script you just created, then make a prefab of this object and delete it from the scene. @@ -42,11 +42,11 @@ To make your own game with the Room system, we have [Script Templates](../genera 9. With the Offline scene open, click Play, and then Host button in the HUD 10. Start one or more built clients and click Client in the HUD for each one. 11. When all clients have clicked their respective Ready buttons, the Game scene will be loaded for everyone. -12. In the Game scene, the Host client will see a Return to Room button that will take everyone back to the Room scene to start another game with the same players. Room Player objects do nothing in the Game scene, but are not destroyed so that when returning to the Room scene they'll be intact. +12. In the Game scene, the Host client will see a Return to Room button that will take everyone back to the Room scene to start another game with the same players. Room Player objects do nothing in the Game scene, but are not destroyed so that when returning to the Room scene they'll be intact. ## Next Steps -Review the stubbed out overrides in the Network Room Manager and Network Room Player scripts you created from the templates. They're heavily commented on what they're to be used for. +Review the stubbed out overrides in the Network Room Manager and Network Room Player scripts you created from the templates. They're heavily commented on what they're to be used for. You can turn off the default UI in the Network Room Manager and Network Room Player inspectors by unchecking the Show Room UI checkbox, and then make your own UI for the Room scene. diff --git a/manual/general/changelog/2021-change-log.md b/manual/general/changelog/2021-change-log.md index 75641b8..1a873ff 100644 --- a/manual/general/changelog/2021-change-log.md +++ b/manual/general/changelog/2021-change-log.md @@ -18,9 +18,9 @@ Mirror uses semantic versioning, and the versions shown here are those that were * Fixed: `NetworkManager.StopClient` no longer fires twice in certain cases. * Fixed: `NetworkMatch` was missing attributes. * Changed: `NetworkLoop` static class is now public. -* Changed: `NetworkConnection.observing` is now public. +* Changed: `NetworkConnection.observing` is now public. - Changed: `NetworkTransformV2` default values updated. `interpolateScale` also defaults to `false` now. +* Changed: `NetworkTransformV2` default values updated. `interpolateScale` also defaults to `false` now. * Changed: `NetworkTransformV2` `isClientAuthority` now `protected` instead of `private`. * Changed: Examples using `NetworkTransformV2` now using default values. * Changed: Updated `NetworkManager` Script Template. @@ -53,11 +53,11 @@ Mirror uses semantic versioning, and the versions shown here are those that were ## [v44.0.2](https://github.com/MirrorNetworking/Mirror/releases/tag/v44.0.2) -- 2021-Aug-08 -* Added: Scene Interest Management. Put this on Network Manager and remove all Network Scene Checker components. -* Added: Match Interest Management. Put this on Network Manager and replace Network Match Checker with new Network Match component. +* Added: Scene Interest Management. Put this on Network Manager and remove all Network Scene Checker components. +* Added: Match Interest Management. Put this on Network Manager and replace Network Match Checker with new Network Match component. * Added: Interest Management now has `OnSpawned` / `OnDestroyed` events. * Added: Network Transform V2 with Snapshot Interpolation. -* Added: Network Transport exception events that transports can raise to Network Manager's `OnServerError` and `OnClientError` overrides. Transports still need to implement their part. +* Added: Network Transport exception events that transports can raise to Network Manager's `OnServerError` and `OnClientError` overrides. Transports still need to implement their part. * Added: `ZigZag VarInt` added back to Compression module. * Fixed: Network Discovery HUD now calls `StopDiscovery` when stopping server/host/client. * Fixed: `NetworkTime.lastPingTime` is now reset properly. @@ -141,10 +141,10 @@ Mirror uses semantic versioning, and the versions shown here are those that were * Fixed: Client Shutdown is no longer run twice via user code calling `StopClient`. * Fixed: `SyncVar` field label not shown in Unity 2020 versions (Unity bug). * Changed: Network Manager `OnServerAddPlayer` now adds the connection id to the object name (on the server only, not synced to clients). -* Changed: Several fields in `NetworkTime` were renamed. The previous field names are still there and **obsolete** and will be removed in a later version. -* Changed: Most of `ClientScene` is now **obsolete**, use same or similar properties in `NetworkClient` instead. `ClientScene` will be fully deprecated and removed in a later version. -* Changed: `NetworkClient.RegisterHandler` overload that included a `NetworkConnection` is now **obsolete** and will be removed in a later version. Handlers can use `NetworkClient.connection` directly. -* Changed: Channel constants names were shortened. The original constants are still there and **obsolete**, and will be removed in a later version. +* Changed: Several fields in `NetworkTime` were renamed. The previous field names are still there and **obsolete** and will be removed in a later version. +* Changed: Most of `ClientScene` is now **obsolete**, use same or similar properties in `NetworkClient` instead. `ClientScene` will be fully deprecated and removed in a later version. +* Changed: `NetworkClient.RegisterHandler` overload that included a `NetworkConnection` is now **obsolete** and will be removed in a later version. Handlers can use `NetworkClient.connection` directly. +* Changed: Channel constants names were shortened. The original constants are still there and **obsolete**, and will be removed in a later version. * **Breaking**: Minimum supported Unity version is now 2019.4.x LTS. * **Breaking**: `ClientScene.onLocalPlayerChanged` removed. * **Breaking**: Compiler symbols culled to Mirror 17 and later versions. @@ -155,7 +155,7 @@ Mirror uses semantic versioning, and the versions shown here are those that were * Added: Global Interest Management. This may eventually lead to replacement of Scene Checker, Match Checker, and Owner Checker components. * Added: GUI Console ported from uMMORPG (F12 to show/hide). * Added: Network Manager now takes itself out of DDOL in `StopServer` / `StopClient` when offline scene is defined to avoid singleton collision. -* Added: Message batching. Enable in Network Manager. +* Added: Message batching. Enable in Network Manager. * Added: Custom Player Loop: * `NetworkEarlyUpdate` (before any Update/FixedUpdate) * `NetworkLateUpdate` (after any Update/FixedUpdate/LateUpdate) loops @@ -179,7 +179,7 @@ Mirror uses semantic versioning, and the versions shown here are those that were * Fixed: Telepathy 1.6 fixes data races and improves stability. * Fixed: KCP 1.8 fixes empty message sending / receiving undefined behaviour and fixes IPv6 on Nintendo Switch. * Changed: Network Manager default max connections is now 100. -* **Breaking**: `NetworkServer` / `NetworkClient` don't use Connect/Disconnect messages any more. Connect/Disconnect events are raised by the transport instead. +* **Breaking**: `NetworkServer` / `NetworkClient` don't use Connect/Disconnect messages any more. Connect/Disconnect events are raised by the transport instead. * **Breaking**: `OnServerError` / `OnClientError` removed since no transport ever implemented them. * **Breaking** Removed `NetworkConnection.InvokeHandler` as no longer needed. diff --git a/manual/general/changelog/2022-change-log.md b/manual/general/changelog/2022-change-log.md index 330435d..c2c8684 100644 --- a/manual/general/changelog/2022-change-log.md +++ b/manual/general/changelog/2022-change-log.md @@ -137,7 +137,7 @@ This version was published to the Asset Store as 2022-09. ## [v66.0.9](https://github.com/MirrorNetworking/Mirror/releases/tag/v66.0.9) -- 2022-Apr-17 {% hint style="warning" %} -**NOTE:** This was to be the last Mirror release to support Unity 2019 LTS, as it has reached end of life by Unity. Support was restored in Mirror 70.0.0 above. +**NOTE:** This was to be the last Mirror release to support Unity 2019 LTS, as it has reached end of life by Unity. Support was restored in Mirror 70.0.0 above. {% endhint %} * Added: [Network Statistics](../../components/network-statistics.md) component, showing messages & packets sent & received per second. @@ -173,8 +173,8 @@ This version was published to the Asset Store as 2022-09. * **Changed**: `CmdDelegate` renamed to `RemoteCallDelegate`. * **Changed**: `MirrorInvokeType` renamed to `RemoteCallType`. * **Changed:** `NetworkManager.clientLoadedScene` is now `protected`. -* **Obsolete**: `NetworkTransform` now has overloads for `CmdTeleport` / `RpcTeleport` with Quaternion rotation, deprecating separate `CmdTeleportAndRotate` / `RpcTeleportAndRotate` methods, made possible by implementing Command / ClientRpc overloads mentioned above. -* **Obsolete:** Experimental Network Transform components. Use the regular ones instead. +* **Obsolete**: `NetworkTransform` now has overloads for `CmdTeleport` / `RpcTeleport` with Quaternion rotation, deprecating separate `CmdTeleportAndRotate` / `RpcTeleportAndRotate` methods, made possible by implementing Command / ClientRpc overloads mentioned above. +* **Obsolete:** Experimental Network Transform components. Use the regular ones instead. ## [v57.0.0](https://github.com/MirrorNetworking/Mirror/releases/tag/v57.0.0) -- 2022-Jan-12 @@ -212,4 +212,4 @@ This version was published to the Asset Store as 2022-09. * **Breaking**: Removed obsolete `PersistNetworkManagerToOfflineScene`. * **Breaking**: `NetworkAuthenticator` `OnClientAuthenticated` event no longer needs a NetworkConnection parameter. * **Obsolete**: OnClient\* virtual methods in Network Manager no longer take a `NetworkConnection` parameter. -* **Obsolete**: Network Room Manager client overrides no longer have `NetworkConnection` parameter. Use `NetworkClient.connection` in your overrides instead. +* **Obsolete**: Network Room Manager client overrides no longer have `NetworkConnection` parameter. Use `NetworkClient.connection` in your overrides instead. diff --git a/manual/general/changelog/2023-change-log.md b/manual/general/changelog/2023-change-log.md index 9e0a26d..3ed23a4 100644 --- a/manual/general/changelog/2023-change-log.md +++ b/manual/general/changelog/2023-change-log.md @@ -55,7 +55,7 @@ Mirror uses semantic versioning, and the versions shown here are those that were * SimpleWebTransport Settings and Logging have been refactored. * There are now separate port fields for server and clients so you don't have to change them for building server and client. * SimpleWebTransport Use of cert.json and SSL certs has been labeled as obsolete in the component inspector. - * This feature will be removed eventually. Reverse Proxy should always be implemented as it performs far better and is easier to maintain. + * This feature will be removed eventually. Reverse Proxy should always be implemented as it performs far better and is easier to maintain. ## [v81.4.0](https://github.com/MirrorNetworking/Mirror/releases/tag/v81.4.0) -- 2023-Aug-03 diff --git a/manual/general/deprecations.md b/manual/general/deprecations.md index 3bcf0d4..6bea4a7 100644 --- a/manual/general/deprecations.md +++ b/manual/general/deprecations.md @@ -218,7 +218,7 @@ The currently defined channels are: Use `Spawn(GameObject obj, Guid assetId, NetworkConnection ownerConnection)` instead. * `disconnectInactiveConnections` and `disconnectInactiveTimeout` were removed. * `NoConnections` was renamed to `NoExternalConnections`. -* `DisconnectAllExternalConnections` / `DisconnectAllConnections` +* `DisconnectAllExternalConnections` / `DisconnectAllConnections` Use `DisconnectAll` instead. * `OnError` renamed to `OnTransportError` for clarity. diff --git a/manual/general/history-bounds.md b/manual/general/history-bounds.md index ff4de7a..b23fd78 100644 --- a/manual/general/history-bounds.md +++ b/manual/general/history-bounds.md @@ -23,7 +23,7 @@ The orange Collider shows the Tank's red Collider over the last second. * Make sure your NetworkIdentity has a collider, drag it into the component's `actualCollider` field * Add a child GameObject with a BoxCollider and isTrigger enabled. Drag it into the component's `boundsCollider`. * Press play, enable Gizmos, notice the orange HistoryCollider. -* The component automatically adjusts the child trigger collider to match the orange box, which means that you can use Physics.Raycast against all the history colliders very easily. +* The component automatically adjusts the child trigger collider to match the orange box, which means that you can use Physics.Raycast against all the history colliders very easily. diff --git a/manual/general/lag-compensation.md b/manual/general/lag-compensation.md index e2a022e..5391269 100644 --- a/manual/general/lag-compensation.md +++ b/manual/general/lag-compensation.md @@ -51,7 +51,7 @@ Our Lag Compensation is split into two parts. #### LagCompensation.cs standalone Algorithm -First, there's the standalone, Unity independent, C# LagCompensation.cs algorithm with full test coverage: +First, there's the standalone, Unity independent, C# LagCompensation.cs algorithm with full test coverage:
diff --git a/manual/general/migration-guide.md b/manual/general/migration-guide.md index aed3db6..e334198 100644 --- a/manual/general/migration-guide.md +++ b/manual/general/migration-guide.md @@ -132,7 +132,7 @@ For example, if you have this code: using UnityEngine; using UnityEngine.Networking; -public class MyBehaviour : NetworkBehaviour +public class MyBehaviour : NetworkBehaviour { public SyncListInt m_ints = new SyncListInt(); @@ -154,7 +154,7 @@ replace it with: using UnityEngine; using Mirror; -public class MyBehaviour : NetworkBehaviour +public class MyBehaviour : NetworkBehaviour { public SyncListInt m_ints = new SyncListInt(); @@ -224,7 +224,7 @@ See for yourself how uMMORPG was migrated to Mirror: * TypeLoadException: A type load exception has occurred. - happens if you still have SyncListStruct instead of SyncListSTRUCT in your project. * NullPointerException: The most likely cause is that you replaced NetworkIdentities or other components but you had them assigned somewhere. Reassign those references. -* `error CS0246: The type or namespace name 'UnityWebRequest' could not be found. Are you missing 'UnityEngine.Networking' using directive?` +* `error CS0246: The type or namespace name 'UnityWebRequest' could not be found. Are you missing 'UnityEngine.Networking' using directive?` Add this to the top of your script: diff --git a/manual/general/tests.md b/manual/general/tests.md index 0b24532..74bbc34 100644 --- a/manual/general/tests.md +++ b/manual/general/tests.md @@ -19,7 +19,7 @@ As far as we know, **Mirror** has the highest test coverage of any `MonoBehaviou In other words, 80% of our code is **covered with tests** making sure that for the given input, it always produces the correct output. Here is what this means in practice: -* If you **report a bug**, we usually fix it and add a test to guarantee that it **never** happens again. +* If you **report a bug**, we usually fix it and add a test to guarantee that it **never** happens again. If we **accidentally** introduce a bug, odds are our tests will catch it immediately before you ever encounter it in our game. * We can **improve** existing functions with confidence. If a rewrite doesn't produce exactly the same output as the previous version, then our tests will catch it. diff --git a/manual/general/timestamp-batching.md b/manual/general/timestamp-batching.md index 97615e9..a489ec5 100644 --- a/manual/general/timestamp-batching.md +++ b/manual/general/timestamp-batching.md @@ -40,7 +40,7 @@ To make life easier, Mirror includes _an 8 byte_ `double` _precision_ `timestamp For any message handler in Mirror, you can get the timestamp from the batch it arrived with via `NetworkConnection.remoteTimeStamp`. -* On the **client**, all object data arrives in messages/batches from the server. So at any given time, you can find out when an object's `Rpc`/`OnDeserialize`/`OnMessage` handler was sent by the server via `NetworkClient.connection.remoteTimeStamp`. +* On the **client**, all object data arrives in messages/batches from the server. So at any given time, you can find out when an object's `Rpc`/`OnDeserialize`/`OnMessage` handler was sent by the server via `NetworkClient.connection.remoteTimeStamp`. * Note that on the client, we don't use an object's `connectionToServer` because only the player owned objects have connections to the server. Instead we use the client's `NetworkClient.connection` to server, which is always guaranteed to be there. * On the **server**, only player owned objects get messages from player connections. So at any given time, you can find otu when object's `Cmd`/`OnDeserialize`/`OnMessage` handler was sent by the client via `connectionToClient.remoteTimeStamp`. diff --git a/manual/guides/data-types.md b/manual/guides/data-types.md index c3774ab..77b4195 100644 --- a/manual/guides/data-types.md +++ b/manual/guides/data-types.md @@ -222,7 +222,7 @@ public static class ArmorSerializer public static Armor ReadArmor(this NetworkReader reader) { - // load the same armor by name. The data will come from the asset in Resources folder + // load the same armor by name. The data will come from the asset in Resources folder return Resources.Load(reader.ReadString()); } } diff --git a/manual/interest-management/custom.md b/manual/interest-management/custom.md index 0502064..ab3e843 100644 --- a/manual/interest-management/custom.md +++ b/manual/interest-management/custom.md @@ -15,7 +15,7 @@ All of the above custom solutions are possible in Mirror. To understand how inte ### Script Template -Mirror includes a [**Script Template**](../general/script-templates.md) for custom interest management. It is fully commented with all the virtual method overrides already stubbed out for you. If you used our legacy Interest Management system before, then these should look familiar. +Mirror includes a [**Script Template**](../general/script-templates.md) for custom interest management. It is fully commented with all the virtual method overrides already stubbed out for you. If you used our legacy Interest Management system before, then these should look familiar. * **OnCheckObserver** is called when someone spawns. Returns true if 'identity' can be seen by 'newObserver' * **OnRebuildObservers** rebuilds observers for the given **Network Identity**. The result is stored in **newObservers**. @@ -97,4 +97,4 @@ The idea is for the **host player** to be a regular player in the game. LAN part **Obviously, the host can cheat.** If you cheat on LAN then you need professional help. {% endhint %} -Mirror has a virtual method `SetHostVisibility(NetworkIdentity, bool)` that enables / disables renderers in host mode. In other words, the world state is still there - the host player just doesn't see it. You can override this in your custom system to suit your needs. +Mirror has a virtual method `SetHostVisibility(NetworkIdentity, bool)` that enables / disables renderers in host mode. In other words, the world state is still there - the host player just doesn't see it. You can override this in your custom system to suit your needs. diff --git a/manual/interest-management/distance.md b/manual/interest-management/distance.md index da19354..5a65d3e 100644 --- a/manual/interest-management/distance.md +++ b/manual/interest-management/distance.md @@ -6,7 +6,7 @@ description: Distance Interest Management ## Distance Interest Management -The straight forward, brute force solution for Interest Management is to simply send all entities to all connections within range. This is what **Network Proximity Checker** did: +The straight forward, brute force solution for Interest Management is to simply send all entities to all connections within range. This is what **Network Proximity Checker** did: ```csharp foreach spawned entity: @@ -19,7 +19,7 @@ The only downside is that it's relatively expensive to check every entity agains ### Setting Up -Add the **Distance Interest Management** component to the same object as your **Network Manager**: +Add the **Distance Interest Management** component to the same object as your **Network Manager**: ![](<../../.gitbook/assets/image (122).png>) diff --git a/manual/interest-management/scene.md b/manual/interest-management/scene.md index ae23706..03725b3 100644 --- a/manual/interest-management/scene.md +++ b/manual/interest-management/scene.md @@ -6,7 +6,7 @@ description: Scene Interest Management ## Scene Interest Management -Scene Interest Management is used with Additive Scenes to networked objects to subscenes with physics isolation. That means that even if you have several instances of the same subscene loaded on the server, collisions and such between objects only happen within that subscene without interfering with others. +Scene Interest Management is used with Additive Scenes to networked objects to subscenes with physics isolation. That means that even if you have several instances of the same subscene loaded on the server, collisions and such between objects only happen within that subscene without interfering with others. {% hint style="info" %} Server and connected clients always have the same main scene loaded. With additive scenes, this is typically a container scene, and additive subscenes have the actual scene contents. @@ -20,13 +20,13 @@ Add the **Scene Interest Management** component to the same object as your **Net ### Add Physics Simulator -In each subscene, add an empty game object, and add a **Physics Simulator** component to that. Since additive scenes will be loaded on the server as "[physics scenes](https://docs.unity3d.com/ScriptReference/PhysicsScene.html)" Unity doesn't simulate physics for them, so this component does that for you in each subscene. +In each subscene, add an empty game object, and add a **Physics Simulator** component to that. Since additive scenes will be loaded on the server as "[physics scenes](https://docs.unity3d.com/ScriptReference/PhysicsScene.html)" Unity doesn't simulate physics for them, so this component does that for you in each subscene. ![](<../../.gitbook/assets/image (24).png>) ### Environment Content -Also in each subscene, create an empty game object called **Environment** with a **Network Identity** and make all static non-networked content to be children of this object. Typically this would include scenery, such as buildings, road meshes and other non-interactive content. +Also in each subscene, create an empty game object called **Environment** with a **Network Identity** and make all static non-networked content to be children of this object. Typically this would include scenery, such as buildings, road meshes and other non-interactive content. ![](<../../.gitbook/assets/image (15).png>) @@ -36,12 +36,12 @@ Do not put anything under the Environment object that will be networked and/or m ### Spawning Players -When you instantiate a player or other networked object, Unity doesn't have any built-in mechanism to specify which subscene the object is instantiated to...it's always the active scene, which is our container scene. After instantiating and before spawning the object, call `SceneManager.MoveGameObjectToScene` to move the object into the correct subscene. Once it's spawned it will be visible to clients with player objects in the same subscene. If you move it to another subscene, visibility in both the new and previous subscenes will be updated automatically. +When you instantiate a player or other networked object, Unity doesn't have any built-in mechanism to specify which subscene the object is instantiated to...it's always the active scene, which is our container scene. After instantiating and before spawning the object, call `SceneManager.MoveGameObjectToScene` to move the object into the correct subscene. Once it's spawned it will be visible to clients with player objects in the same subscene. If you move it to another subscene, visibility in both the new and previous subscenes will be updated automatically. {% hint style="info" %} -Note that the networked objects are only moved to subscenes on the server. Clients spawn everything in the container scene, and there's no need to move objects to a subscene on the clients, since they only have one subscene loaded at a time. +Note that the networked objects are only moved to subscenes on the server. Clients spawn everything in the container scene, and there's no need to move objects to a subscene on the clients, since they only have one subscene loaded at a time. {% endhint %} ### Raycasting and Such -Physics scenes have a special set of methods for Raycast and such that must be used on the server since the server has the subscenes as physics scenes. You can read about those [here](https://docs.unity3d.com/ScriptReference/PhysicsScene.html). On the remote (non-Host) clients, raycasting is done with the normal methods, since the client just merges the additive scene with the container without it being a physics scene. +Physics scenes have a special set of methods for Raycast and such that must be used on the server since the server has the subscenes as physics scenes. You can read about those [here](https://docs.unity3d.com/ScriptReference/PhysicsScene.html). On the remote (non-Host) clients, raycasting is done with the normal methods, since the client just merges the additive scene with the container without it being a physics scene. diff --git a/manual/interest-management/spatial-hashing.md b/manual/interest-management/spatial-hashing.md index 4d33ba6..0cd37a8 100644 --- a/manual/interest-management/spatial-hashing.md +++ b/manual/interest-management/spatial-hashing.md @@ -20,7 +20,7 @@ Add the **Spatial Hashing Interest Management** component to the same object as ### **How It Works** -Previously we **Vector3.Distance** checked each spawned entity against each connection. Instead, we put each spawned entity into a **Grid** and for each connection, we send all **8-neighbor** grid entries to it. This is extremely fast. In early uMMORPG tests, it was 30x faster than distance checking. The algorithm is less complex, so it scales well to large amounts of entities. +Previously we **Vector3.Distance** checked each spawned entity against each connection. Instead, we put each spawned entity into a **Grid** and for each connection, we send all **8-neighbor** grid entries to it. This is extremely fast. In early uMMORPG tests, it was 30x faster than distance checking. The algorithm is less complex, so it scales well to large amounts of entities. ![Source: https://www.dynetisgames.com/2017/04/05/interest-management-mog/](<../../.gitbook/assets/image (27).png>) diff --git a/manual/interest-management/team.md b/manual/interest-management/team.md index b2f3c15..3159b6d 100644 --- a/manual/interest-management/team.md +++ b/manual/interest-management/team.md @@ -14,7 +14,7 @@ Add the **Team Interest Management** component to the same object as your **Netw ![](<../../.gitbook/assets/image (58).png>) -Add a **Network Team** component to the player prefab and any other prefabs that will belong to a team. Set the Team ID to the same value at runtime for players / objects on the same team. +Add a **Network Team** component to the player prefab and any other prefabs that will belong to a team. Set the Team ID to the same value at runtime for players / objects on the same team. ![](<../../.gitbook/assets/image (35).png>) diff --git a/manual/transports/multiplex-transport.md b/manual/transports/multiplex-transport.md index e4722f8..a1f3e3c 100644 --- a/manual/transports/multiplex-transport.md +++ b/manual/transports/multiplex-transport.md @@ -2,7 +2,7 @@ The Multiplex Transport is not a transport itself, but it allows you to combine other transports so that your clients can connect to your servers via either one of them. -A common use case for the Multiplex Transport is a server listening for both WebGL and mobile / desktop clients. Your WebGL clients can connect to the server using a [Websocket Transport](websockets-transport/) and your mobile or desktop clients can connect to the same server via TCP or UDP transports. You can configure any number of transports in the Multiplex Transport. +A common use case for the Multiplex Transport is a server listening for both WebGL and mobile / desktop clients. Your WebGL clients can connect to the server using a [Websocket Transport](websockets-transport/) and your mobile or desktop clients can connect to the same server via TCP or UDP transports. You can configure any number of transports in the Multiplex Transport. To use the Multiplex Transport follow these steps: diff --git a/manual/transports/websockets-transport/reverse-proxy/linux/nginx.md b/manual/transports/websockets-transport/reverse-proxy/linux/nginx.md index 14a69ff..37ea9a1 100644 --- a/manual/transports/websockets-transport/reverse-proxy/linux/nginx.md +++ b/manual/transports/websockets-transport/reverse-proxy/linux/nginx.md @@ -140,7 +140,7 @@ server { # Tell upstream the host proxy_set_header Host $host; # Tell upstream real ip & forwarded for header - proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # tell upstream this was served via https proxy_set_header X-Forwarded-Proto https; @@ -224,7 +224,7 @@ server { # Tell upstream the host proxy_set_header Host $host; # Tell upstream real ip & forwarded for header - proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; diff --git a/manual/transports/websockets-transport/reverse-proxy/linux/nginx_updated.md b/manual/transports/websockets-transport/reverse-proxy/linux/nginx_updated.md index e9d2cf2..38fd03b 100644 --- a/manual/transports/websockets-transport/reverse-proxy/linux/nginx_updated.md +++ b/manual/transports/websockets-transport/reverse-proxy/linux/nginx_updated.md @@ -69,7 +69,7 @@ server { # Tell upstream the host proxy_set_header Host $host; # Tell upstream real ip & forwarded for header - proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # tell upstream this was served via https proxy_set_header X-Forwarded-Proto https; @@ -127,7 +127,7 @@ server { # Tell upstream the host proxy_set_header Host $host; # Tell upstream real ip & forwarded for header - proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; diff --git a/manual/transports/websockets-transport/reverse-proxy/windows/iis.md b/manual/transports/websockets-transport/reverse-proxy/windows/iis.md index 00bcef6..3aaf99c 100644 --- a/manual/transports/websockets-transport/reverse-proxy/windows/iis.md +++ b/manual/transports/websockets-transport/reverse-proxy/windows/iis.md @@ -63,7 +63,7 @@ Since all clients will be connected through IIS, which uses a "worker process" t ### SSL Certificate {% hint style="warning" %} -NOTE: DNS records pointing to this server need to be done before this step, and propagated to the world DNS servers. If you can't reach this site with a browser, setting up SSL using WinAcme won't work. +NOTE: DNS records pointing to this server need to be done before this step, and propagated to the world DNS servers. If you can't reach this site with a browser, setting up SSL using WinAcme won't work. {% endhint %} You'll need an SSL certificate for your domain. @@ -86,7 +86,7 @@ You'll see that WinAcme has added a binding for port 443 with the same host name You can double click the port 443 binding to see how it is set up with the SSL certificate selected. -Click Add to create one more binding for port 7777 as shown below, using the same SSL certificate as was used for port 443. This will be for the client to connect to the Reverse Proxy that will be set up later in this document. If you're running multiple game server instances on the same server, just add a binding for each port you're using. Make sure your firewall has all of the ports open. +Click Add to create one more binding for port 7777 as shown below, using the same SSL certificate as was used for port 443. This will be for the client to connect to the Reverse Proxy that will be set up later in this document. If you're running multiple game server instances on the same server, just add a binding for each port you're using. Make sure your firewall has all of the ports open.
@@ -115,7 +115,7 @@ Make sure Simple Web Transport is set up like this: In Unity, Network Manager, change Network Address to the same name as you used in Bindings above, e.g. game.example.com. -* Select Dedicated Server platform in Build Settings, build and deploy your server to a folder on the server. Mirror will start the server on the Port specified (27777 from the image above). +* Select Dedicated Server platform in Build Settings, build and deploy your server to a folder on the server. Mirror will start the server on the Port specified (27777 from the image above). * Change the platform in Build Settings to WebGL, and build the client, and upload that to the folder on your server that your Default website is pointed to in IIS. ### web.config for IIS