• 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
Question by Valentin_B · Jan 20, 2014 at 11:10 AM · networkinginstantiateprefablobby

What can prevent a prefab network instantiation?

Hello everybody,

I am struggling with a quite unusual issue with Network.instantiate.

In short, it seems a Network.instantiate of a specific prefab keeps views of other prefabs from instantiating through the network on the owner of the "blocking" prefab.

My project has a small lobby/room management system that also handles map and slot selection.

I'll try to give you a clear overview of the thing:

ClientServerApp.cs:

     //method called server side on launch of the module.
     private void launcher()
     {
         if(Network.connections.Length + 1 < SceneProperties.networkModule.spots.Count)
         {
             SendMessage("addMessage","Not enough players in lobby yet");
             return;
         }
         if(_occupiedSlots.Count < SceneProperties.networkModule.spots.Count)
         {
             SendMessage("addMessage","Not all players are ready");
             return;
         }
         
         SceneProperties.isServer = Network.isServer;
         
         networkView.RPC("launchLevel",RPCMode.AllBuffered);
     }

This part is for when the host clicks "start module", a RPC call is sent to all ClientServerApp.cs, causing the selected level to load additively on every client

     [RPC]
     private void launchLevel()
     {
         SendMessage("levelStarted");
         
         SceneProperties.spot = SceneProperties.networkModule.spots[_occupiedSlots[Network.player]];
     
         Network.SetLevelPrefix(1);
         Application.LoadLevelAdditive(SceneProperties.networkScene);
     }

The actual RPC method, everything going smoothly so far

Now, at this point, a gameObject with a networkView observing a script called LevelManager.cs is loaded, it is within the actual level scene. The important bits:

     void Start()
     {
         if(LevelManager.Instance != null && LevelManager.Instance != this)
         {
             DestroyImmediate(gameObject);
         }
         
         LevelManager.Instance = this;
         
         this._onAllClientsLoaded = new AllClientsLoadedDelegate(this.instantiate);
         
         ClientServerApp.Instance.AllClientsLoadedEvent += this._onAllClientsLoaded;
         
         DontDestroyOnLoad(this.gameObject);
         
         this.onNodeReadyEvent = new nodeReadyDelegate(this.nodeReadyHandler);
         
         ClientServerApp.Instance.setReady();
     }

What this does is basicaly subscribing to some events to coordinates to scene/networkNodes loads. But more importantly, it signifies the ClientServerApp that it was loaded.

The following methods are from ClientServerApp.cs, directly following up the previous: public void setReady() { this.networkView.RPC("setReadyRPC",RPCMode.AllBuffered); }

     [RPC]
     private void setReadyRPC(NetworkMessageInfo info)
     {
         if(++this._clientsReady==this.userNb)
         {
             AllClientsLoadedEvent();
         }
     }

What this does is if all the clients (or Level Managers) have loaded, the ClientServerApp fires an event on all client saying the level is loaded on every client

...event that is listened to by LevelManager.cs, and the callBack is:

     void instantiate()
     {
         GameObject newnode = Network.Instantiate(Resources.Load(SceneProperties.spot.engin+"_networkNode"),SceneProperties.spot.beginPoint.position,SceneProperties.spot.beginPoint.rotation,0) as GameObject;
         setSpecifics(newnode);
     }


Aaaaand it doesn't work at this point. I can instantiate 2 types of prefabs with that last "instantiate()" method, one of them blocks further instantiation from other prefabs views on its owner's side.

Sorry if I'm abusing your time with such a long post, but I'm growing quite desperate with this, I'm stuck for about 4 days now....

please halp.

Comment

People who like this

0 Show 0
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

0 Replies

· Add your reply
  • Sort: 

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

18 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

Related Questions

Network instantiate command do not execute in all client.. 1 Answer

Instantiating a prefab that needs a public reference to another prefab 3 Answers

[UNET] How to know the connectionID of a player ? 2 Answers

"GameObject Player is a prefab, it can't be spawned. This will cause errors in builds." 8 Answers

Player Prefab on Lobby Managers? 5 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