- Home /
NetworkView.Find problem, Unity bug?
Hello,
I have been battling with this error for some time now and I really can't find the source of its problem.
I am creating a multi player game where the server keeps track of all players and their health. I have some functions that go through all the players, stored in a hashtable, which take or add energy to them.
The problem is so strange that in one function I go through the hashtable without any error and remove their energy. When I use the exact same code on a different function to add energy I always get this error:
View ID AllocatedID: 1 not found during lookup. Strange behaviour may occur UnityEngine.NetworkView:Find(NetworkViewID) PlayerStats:SetPlayersEnergy(Int32) (at Assets/Scripts/Player/PlayerStats.cs:514)
For the sake of it, I will share the two functions here and maybe you can help me with it!
This RemoveDailyEnergy is working properly
public void RemoveDailyEnergy() {
Debug.Log("RemoveDailyEnergy");
if (Network.isServer)
{
NetworkViewID[] tmpPlayers = new NetworkViewID[players.Count];
players.Keys.CopyTo(tmpPlayers, 0);
foreach (NetworkViewID player in tmpPlayers)
{
Debug.Log("Remove energy: " + player);
NetworkView tmp = NetworkView.Find(player);
if ((int)players[player] <= dailyEnergyModifier)
{
tmp.RPC("KillPlayer", RPCMode.AllBuffered, player);
players.Remove(player);
teams.Remove(player);
usernames.Remove(player);
}
else
{ //remove energy from player
players[player] = (int)players[player] - dailyEnergyModifier;
if (tmp.isMine)
tmp.gameObject.GetComponent<PlayerHarvestWater>().RemoveEnergy(player, (int)players[player], false);
else
tmp.RPC("RemoveEnergy", player.owner, player, (int)players[player], false);
}
}
}
}
This one isn't:
public void SetPlayersEnergy(int newEnergy) { if (Network.isServer) {
initialEnergy = newEnergy;
NetworkViewID[] tmpPlayers = new NetworkViewID[players.Count];
players.Keys.CopyTo(tmpPlayers, 0);
foreach (NetworkViewID player in tmpPlayers)
{
Debug.Log("Set energy: " + player);
try
{
NetworkView tmp = NetworkView.Find(player);
players[player] = newEnergy;
if (tmp.isMine)
tmp.gameObject.GetComponent<PlayerHarvestWater>().AddEnergy(player, (int)players[player]);
else
tmp.RPC("AddEnergy", player.owner, player, (int)players[player]);
}
catch (System.Exception e)
{
Debug.Log(e.StackTrace);
}
}
}
}
The error happens on this line:
NetworkView tmp = NetworkView.Find(player);
Any help will be really appreciated!!! Thanks (Sorry the formatting, this is going nuts :S)
Answer by talk_show_host · Jul 06, 2011 at 12:16 AM
Ok, somehow got a work around.
So I guess RPC should work on disabled objects but with this case it wasn't working. I was disabling the player object with the RPC script to access a menu and edit stuff, and when the NetworkView.Find was searching for that ID it just crashed.
At least it should be possible to catch the exception, which wasn't working either. Maybe this part is Unity's fault?
Basically, just made a check before Find to see if it was my ID and ignore the find.
Cheers!
Your answer

Follow this Question
Related Questions
View ID AllocatedID: # not found during lookup. Strange behaviour may occur 1 Answer
View ID SceneID: X Level Prefix: Y not found during lookup. Strange behaviour may occur 0 Answers
Weird network spawning bug. 1 Answer
Anyone run into this before? White line in middle of screen. 1 Answer
My dialogue system has a strange bug 0 Answers