- Home /
NetworkView conflicts between Levels
What is the best way to resolve this situation where you: load scenes with GameObject
s that have NetworkView
s and `DontDestroyOnLoad()`?
This causes conflicts in the viewId's of the NetworkView
between objects when you switch levels.
Note: This does not affect `Network.Instantiate`'ed objects because the viewId is made unique automatically for you.
init_scene
is the first loaded scene. _Managers
and Main Camera
have `DontDestroyOnLoad()` so that they are maintainted between level changes.
Here is a list of of networkView.viewId
and what scene they originate from. We started at init_scene
and then `Application.LoadLevel()` level01
init_scene:
_Managers: SceneID: 1 Level Prefix: 0
Main Camera: SceneID: 2 Level Prefix: 0
level01:
Ring: SceneID: 2 Level Prefix: 0
Sphere: SceneID: 1 Level Prefix: 0
**Player(Clone):* AllocatedID: 1
**Player(Clone):* AllocatedID: 150
`Network.Instantiate`'ed. Meaning they are dynamically loaded into the level.*
As you can see there is a conflict between _Managers
<->`Sphere` and Main Camera
<->`Ring`. So if you call an RPC on Ring
then it will error:
RPC call failed because the function 'RPCFucntion' does not exist in any script attached to'Main Camera'
The only solution I can think of is to have the server `Network.Instantiate` those objects. But I really want those objects saved in the scene and not hidden away in a script until I press play.
For others who want to debug their NetworkView's, here is a snippet that you can use:
[ContextMenu ("Analyze networkView ID")]
void AnalyzeNetworkViews() {
NetworkView[] netViews = FindObjectsOfType(typeof(NetworkView)) as NetworkView[];
Debug.Log("-------------------------");
foreach(NetworkView netView in netViews)
{
Debug.Log(netView + " - id: " + netView.viewID + " - guid: " + netView.owner.guid);
}
Debug.Log("-------------------------");
}
interference, conflicts, blocking
Answer by MLM · Mar 05, 2014 at 04:59 AM
I can't believe I missed this **related question**
You want to call `Network.SetLevelPrefix(...)` before the Application.LoadLevel(...)
call.
Also see this documentation "Network Level Loading"