Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by FranktheGame · May 25, 2021 at 08:39 PM · networkingmultiplayerspawnmultiplayer-networking

MLAPI spawn player prefab

I am trying to load PlayerPrefabs manually. My game starts in a MainMenu scene, first player hosts, server starts, a new scene loads, player prefab spawns in and everything seems to work fine. When I join as a client, I can't get the second player prefab to spawn, but I do connect and see the 1st player moving around. I am running this script in an object placed in the scene.

  public class GameSceneManager : NetworkBehaviour
 {
            private void Start()
         {
             // get spawn points
             _spawnPoints = GameObject.FindGameObjectsWithTag("playerSpawn");
 
             SpawnPlayerServerRpc();
     
         }
         private Transform GetSpawnPoint()
         {
             if (_spawnPoints.Length == 0) { return null; }
     
             if (NetworkManager.Singleton.IsHost)
             {
                 return _spawnPoints[0].transform;
             }
             else
             {
                 ulong id = NetworkManager.Singleton.LocalClientId;
                 int count = (int)(id - 1);
     
                 return _spawnPoints[count].transform;
             }
         }
     
         [ServerRpc]
             public void SpawnPlayerServerRpc(ulong clientId)
             {
                 Transform spawn = GetSpawnPoint();
     
                 GameObject go = Instantiate(_playerPrefab, spawn.position, spawn.rotation);
                 go.GetComponent<NetworkObject>().SpawnAsPlayerObject(OwnerClientId);
                 ulong objectId = go.GetComponent<NetworkObject>().NetworkObjectId;
     
                 SpawnClientRpc(objectId);
             }
         
             [ClientRpc]
             private void SpawnClientRpc(ulong objectId)
             {
                 NetworkObject player = NetworkSpawnManager.SpawnedObjects[objectId];
             }

I get this error: Trying to destroy object 0 but it doesn't seem to exist anymore! UnityEngine.Debug:LogWarning (object) MLAPI.Spawning.NetworkSpawnManager:OnDestroyObject (ulong,bool) (at Library/PackageCache/com.unity.multiplayer.mlapi@0.1.0/Runtime/Spawning/NetworkSpawnManager.cs:660) MLAPI.NetworkObject:OnDestroy () (at Library/PackageCache/com.unity.multiplayer.mlapi@0.1.0/Runtime/Core/NetworkObject.cs:366)

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
2

Answer by FranktheGame · May 26, 2021 at 03:27 PM

I got it working. If anyone else is having same issue or just curious, what I did not understand was that the GameObject I was trying to spawn from, was a NetworkObject that was owned by the Host(1st player to log on), so even if I used NetworkManager.Singleton.LocalClientId; it would return the Host clientId instead of the new player that was calling it. I just called the method and sent the localId from another script that was MonoBehaviour (not a NetworkObject), I know this needs work, but it's working for now:

 public class NetworkPlayerSpawner : NetworkBehaviour
 {
 
     [SerializeField] private GameObject _playerPrefab = null;

     void Start()
     {
         // get spawn points
         _spawnPoints = GameObject.FindGameObjectsWithTag("playerSpawn");
     }
 
     private Transform GetSpawnPoint()
     {
         // Stop if there are no spawn points in the seen
         if (_spawnPoints.Length == 0) { return null; }
 
         // get number of players
         if (NetworkManager.Singleton.IsHost)
         {
             return _spawnPoints[0].transform;
         }
         else
         {
             ulong id = NetworkManager.Singleton.LocalClientId;
             int count = (int)(id - 1);
             return _spawnPoints[count].transform;
         }
     }
 
     [ServerRpc(RequireOwnership = false)]  
     public void SpawnPlayerServerRpc(ulong clientId)
     {
         // Get Spawn.  Stop if there are no spawn points in the seen
         Transform spawn = GetSpawnPoint();
         if (spawn == null) { Debug.Log("No Spawn Points in Scene!"); return; }
 
         // Spawn on Client
         GameObject go = Instantiate(_playerPrefab, spawn.position, spawn.rotation);
 
 
         Debug.Log("clientId = " + clientId);
         go.GetComponent<NetworkObject>().SpawnAsPlayerObject(clientId);
         ulong objectId = go.GetComponent<NetworkObject>().NetworkObjectId;
 
         SpawnClientRpc(objectId);
 
     }
 
     // A ClientRpc can be invoked by the server to be executed on a client
     [ClientRpc]
     private void SpawnClientRpc(ulong objectId)
     {
         NetworkObject player = NetworkSpawnManager.SpawnedObjects[objectId];
     }
 }


and I just called the method from another script on Start (when the player loads into the scene)

       void Start(){
 
         ulong id = NetworkManager.Singleton.LocalClientId;
         _networkPlayerSpawner.SpawnPlayerServerRpc(id);
 }


Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by NocSchecter · Sep 27, 2021 at 10:55 PM

Hello!

Could you tell me use a part of your code but all my players are instantiated in the first value of my list containing the spawnpoints.

Do you have the code on the client side? when a client chooses where to position itself instead of the server doing it?

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image viknesh2020 · Nov 18, 2021 at 02:43 PM 0
Share

I think you have to give write permission to the client to change the position variable. Or do a check if it is client or server then change the position value.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

232 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Unity networking tutorial? 6 Answers

Trying to spawn players in multiple starting positions 1 Answer

UNET Multiplayer Lobby not creating an instance of the lobby player 1 Answer

how can i change my scripts to make them multiplayer aware,How can I change my scripts to make them multiplayer aware? 1 Answer

Mirror multiplayer Command issue 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges