com.unity.netcode.gameobjects icon indicating copy to clipboard operation
com.unity.netcode.gameobjects copied to clipboard

Player spawn ignores position and rotation (connection approval)

Open SubatomicPlanets opened this issue 1 year ago • 4 comments

When using connection approval and setting the players position and rotation, it doesn't work correctly. It always spawns at 0,0,0 with rotation 0,0,0.

I upgraded from 1.7.1 to 2.0.0, and everything seems to be working fine (not a complex project) except for the spawning of players. Obviously they should spawn at the position and rotation that I set.

Example:

Transform spawner = GameObject.FindGameObjectWithTag("Spawner").transform;
response.Approved = true;
response.CreatePlayerObject = true;
response.Position = spawner.position;
response.Rotation = spawner.rotation;

When adding Debug.Log to check the position and rotation, it prints the expected values (in my case, somewhere around 30, 60, 50 for position). This means the Transform spawner was found, and all of this is working. But when the player spawns, it's always at 0,0,0.

I tried different player prefabs and different settings, but nothing worked. I also just created a new project with the Bootstrap sample and just added this code to the BootstrapManager:

private void ApprovalCheck(NetworkManager.ConnectionApprovalRequest request, NetworkManager.ConnectionApprovalResponse response)
{
    response.Approved = true;
    response.CreatePlayerObject = true;
    response.Position = Vector3.one;
    Debug.Log(response.Position); //prints 1,1,1
    response.Rotation = Quaternion.identity;
}

and networkManager.ConnectionApprovalCallback += ApprovalCheck; before it starts the host on line 21. Then I also enabled connection approval on the network manager in the scene. I would expect the player to spawn at 1,1,1 but it spawns at 0,0,0.

I use Netcode 2.0.0 and Unity 6000.0.20f1 on Windows

SubatomicPlanets avatar Sep 25 '24 11:09 SubatomicPlanets

I looked around the code trying to see what I could change and I think it might actually be a really simple fix. In the GetNetworkObjectToSpawn method in NetworkSpawnManager.cs on line 756 it says this: networkObject = UnityEngine.Object.Instantiate(networkPrefabReference).GetComponent<NetworkObject>(); I believe the fix could be as simple as changing this line to this: networkObject = UnityEngine.Object.Instantiate(networkPrefabReference, position, rotation).GetComponent<NetworkObject>();

I tested it using multiplayer play mode and it seemed to work.

SubatomicPlanets avatar Sep 26 '24 12:09 SubatomicPlanets

You are indeed correct on this regression bug. I will have a PR up for this hopefully by today/tomorrow and it will be included in the v2.0.1 update.

Thank you for the follow up and the investigation you did (helped me quickly verify the bug with your findings).

NoelStephensUnity avatar Sep 26 '24 17:09 NoelStephensUnity

Okay, great! Do you have any idea of when v2.0.1 will release?

SubatomicPlanets avatar Sep 27 '24 09:09 SubatomicPlanets

Soon... I am not allowed to discuss actual dates but I can say within a few weeks from today. Until then, you can always replace your com.unity.netcode.gameobjects manifest.json file entry with this: "com.unity.netcode.gameobjects":"https://github.com/Unity-Technologies/com.unity.netcode.gameobjects.git?path=com.unity.netcode.gameobjects#develop-2.0.0",

That will provide you with the most recent fixes that have been merged for NGO v2. Once the new package update is released you can just update to that via the package manager.

NoelStephensUnity avatar Sep 27 '24 12:09 NoelStephensUnity

This is now fixed in the newest version, closing this issue.

SubatomicPlanets avatar Oct 22 '24 11:10 SubatomicPlanets