- Home /
Question by
dev_runeofdark · Apr 15, 2018 at 01:06 PM ·
networkingrpcclienthost
clientrpc function gives null reference after client disconnects from host
Hi,
I having some trouble with my host and the client. After the client disconnects from the host I got a null reference at the call of the RpcUpdateMapProperties in the MapManager. I think it comes the function will be continuously called. But I am not sure.
public class MapManager : NetworkBehaviour {
private Camera mainCameraToUse;
private MapboxQuadTreeBasicMap basicMap;
private MapboxQuadTreeCameraMovement cameraMovement;
private QuadTreeTileProvider quadTreeTileProvider;
private UiController uiController;
public override void OnStartClient()
{
if (isServer)
return;
InitializeClientCamera();
basicMap = FindObjectOfType<MapboxQuadTreeBasicMap>();
cameraMovement = FindObjectOfType<MapboxQuadTreeCameraMovement>();
quadTreeTileProvider = FindObjectOfType<QuadTreeTileProvider>();
base.OnStartClient();
}
public override void OnStartServer()
{
InitializeHostCamera();
basicMap = FindObjectOfType<MapboxQuadTreeBasicMap>();
cameraMovement = FindObjectOfType<MapboxQuadTreeCameraMovement>();
cameraMovement.OnUpdateMapReceived += OnReceivedUpdatedMapProperties;
uiController = FindObjectOfType<UiController>();
uiController.OnReceivedCenterLocation += OnReceivedLocationChanged;
quadTreeTileProvider = FindObjectOfType<QuadTreeTileProvider>();
base.OnStartServer();
}
[Server]
private void InitializeHostCamera()
{
mainCameraToUse = GameObject.Find("MapCamera").GetComponent<Camera>();
mainCameraToUse.tag = "MainCamera";
mainCameraToUse.depth = -1;
}
[Client]
private void InitializeClientCamera()
{
mainCameraToUse = GameObject.Find("ARCamera").GetComponent<Camera>();
mainCameraToUse.tag = "MainCamera";
mainCameraToUse.depth = -1;
}
[Server]
public void OnReceivedUpdatedMapProperties(Vector2d latlong, float zoom)
{
RpcUpdateMapProperties(latlong.x, latlong.y, zoom);
}
[Server]
public void OnReceivedLocationChanged(Vector2d newCenterPoint)
{
cameraMovement.SetMapToLocation(newCenterPoint);
RpcUpdateLocationChanged(newCenterPoint.x, newCenterPoint.y);
}
[ClientRpc]
private void RpcUpdateLocationChanged(double latitude, double longitude)
{
Vector2d centerLatitudeLongitude = new Vector2d(latitude, longitude);
cameraMovement.SetMapToLocation(centerLatitudeLongitude);
}
[ClientRpc]
private void RpcUpdateMapProperties(double latitude, double longitude, float zoom)
{
Vector2d latlong = new Vector2d(latitude, longitude);
quadTreeTileProvider.UpdateMapProperties(latlong, zoom);
}
private void OnDestroy()
{
if (isClient)
return;
cameraMovement.OnUpdateMapReceived -= OnReceivedUpdatedMapProperties;
uiController.OnReceivedCenterLocation -= OnReceivedLocationChanged;
}
Any help will be appreciated.
knipsel.png
(87.0 kB)
Comment
Your answer

Follow this Question
Related Questions
Requesting data from server 1 Answer
Force local client RPC to fire immediately? 0 Answers
Command not executing for all clients 0 Answers
How can i send a Player list to every Client 0 Answers
Unity networking tutorial? 6 Answers