Frequently Asked Questions
Is there a way I can test Kaiju Multiplayer Engine before purchasing it?
You can play a demo of Kaiju Multiplayer Engine. This game is the same as the included standalone networking sample, and the samples for all other networking framework integrations replicate the same sample scene. This sample demonstrates the included developer UI. This demo is available for Windows. As this uses a placeholder app ID for Steam, certain features such as the invite overlay will not function.
I am getting compilation errors.
Ensure all dependencies and integrations are up to date. For dependencies and integrations you manually installed, you will need to remove them from your project and manually install them again. For ones you automatically installed, you can do this by going to Window > Package Management > Package Manager from the top menu and clicking on In Project. From here, for official Unity packages under the Packages - Unity section, an icon will appear if an update is available for a package, in which case click on the package and then click Update. For packages you installed via Git, indicated by the Git tag, the Package Manager does not display whether updates are available. Instead, simply click on each package and click the Update button, which will perform an update if one is available.
If you have ensured all packages are up to date, try reinstalling KMPE. To do this, remove your current KMPE installation by going to Window > Package Management > Package Manager and clicking on In Prohect select Kaiju Multiplayer Engine. Then, click on Manage and click Remove. Then, click on the My Assets tab, search for Kaiju Multiplayer Engine, and reinstall it.
If issues still arise after ensuring KMPE and all dependencies and integrations are up to date, please contact us so we can help figure out what is wrong.
I have Steamworks.NET installed, but no Steam functionality is working.
If you have Steamworks.NET but no Steam functionality is working, you likely have not enabled Steamworks.NET. Steamworks.NET only runs if the STEAMWORKS_NET preprocessor directive is set. By default, a new installation of Steamworks.NET will add this; however, Steamworks.NET gives you the option to turn off automatically defining STEAMWORKS_NET. You can turn on automatically defining STEAMWORKS_NET by going to Edit > Project Settings from the top menu, selecting Steamworks.NET in the side menu, and enabling Can Manage the Define Symbols. You can manually add the STEAMWORKS_NET preprocessor directive by going to Edit > Project Settings from the top menu, selecting Player, and adding STEAMWORKS_NET to the Scripting Define Symbols.
What other networking library integrations will be added?
We are constantly evaluating what networking integrations could be added in the future. If we see a library with great features and a growing userbase, we will look into adding support for it. If there are any networking integrations in particular you are interested in, please let us know!
Are there plans for a one-size-fits-all host migration?
This is absolutely something we would love to do! However, as mentioned in the documentation of the networking integrations, there are factors that make this currently not possible. First, each framework handles data synchronization in different ways, so getting complete host migration functionality for one network integration, let alone all, would take a long time, if it is even possible. Second, there would likely always be edge cases for certain games we miss, or aspects that break when a network integration updates. Lastly, most networking integrations were not designed with host migration in mind to begin with, following a strict client-server model which has no built-in functions to save game state in the event the server shuts down. Despite these issues, we will continually reevaluate this topic, as it's something we absolutely want to add if possible. If any networking library we support introduces host migration, we will work to ensure KMPE is fully compatible with it as soon as possible.
Recently, PurrNet has pushed some files to their main GitHub repository named "PurrMigrate", indicating they are in the initial phases of creating their own host migration system. Once a version of this is released, ensuring KMPE is fully compatible with it will be a top priority of ours to add.
Unity's Netcode for GameObjects has introduced a "Distributed Authority" architecture which has automatic host migration; however, it is tied to Unity's multiplayer services with no current plans of decoupling it. Should Unity ever open up its distributed authority implementation in a way it can be integrated with KMPE, we will aim to do so as soon as possible.
FishNet is considering adding host migration in the future as a pro feature. While we will monitor this development, it is likely a long ways out, and as this would require the paid pro version of FishNet, while we will aim to ensure KMPE can support it, you would only be able to use it with the paid version of FishNet.
What versions of Unity will be supported?
Currently, KMPE requires Unity 6.3 LTS. We aim to support the latest LTS and if any exist, supported Unity releases beyond the latest LTS version. If you notice a new Unity release is not compatible with KMPE, please let us know!
What versions of dependencies and integrations will be supported?
KMPE will aim to use the most up-to-date versions of dependencies and integrations. If you notice a new release of a dependency or integration is not compatible with KMPE, please let us know!
There is a Steam feature I want to use but KMPE does not have it.
As KMPE focuses on Steam multiplayer features only, it does not have every single Steam function. Luckily, KMPE is built on top of Steamworks.NET, which gives you full Steamworks API access! Steamworks.NET provides C# versions of all functions from the Steamworks API which can be found on the official Steamworks API documentation. If you believe a Steamworks API feature should be added to KMPE directly, please let us know!
Steamworks lobbies do not support kicking or banning. How does KMPE implement this?
You would be right that Steamworks lobbies do not have built-in kicking or banning, despite there being some unused methods related to them in the API. In fact, the current documentation says to kick someone, you "do it with a special packet sent [to the lobby], when the [user getting kicked] gets the packet they should [leave]". However, this approach is clearly flawed:
- If you are kicking someone because they are cheating, what's stopping them from simply ignoring the kick message and staying in the lobby? Nothing!
- Even if the kicking does work and the user leaves the lobby as requested, there is no way to ban someone like this, as they could simply join back after. The only way around this would be to then set the lobby to invite-only, but if you're wanting to have a public lobby, this is clearly not an option.
To overcome this, KMPE has built its own kicking and banning system on top of Steamworks lobbies! When a user is banned by the lobby owner, they are added to the lobby data to indicate this. When this happens, all other users in the lobby will see this and stop all communications with the banned user. At the same time, this banned user will disconnect themselves. However, even if they are cheating and simply choose to ignore this message, they won't be able to interact with anyone else in the lobby as all other users will continue to ignore them! Thus, the worst a cheater could do is "stay" in the Steamworks lobby, taking up a member space, but this will not have any impact on other users in the lobby or the game they are playing. For kicking, it is simply an extension of the banning system. When a user is kicked, it initially treats it as if they are banned. Then, once the kicked user acknowledges this and properly leaves, they are automatically unbanned, allowing them to later join back if they wish.