Hi
I have 3 scripts.
1st for Slient/Server selection
public class AeEngine : MonoBehaviour {
...
public void OnGUI() {
if (GUILayout.Button ("Server")) {
gameObject.AddComponent(typeof(AeServer));
}
if (GUILayout.Button ("Client")) {
gameObject.AddComponent(typeof(Client));
}}
..
}
Client Script
public class AeClient : MonoBehaviour
{
void Awake() {
gameObject.name = "Client";
gameObject.AddComponent(typeof(NetworkView));
networkView.group = 1;
networkView.observed = null;
networkView.stateSynchronization = NetworkStateSynchronization .Off;
}
...
public void OnConnectedToServer() {
networkView.RPC( "Login", RPCMode.Server, login, password);
}
[RPC]
public void InstantiateLocalPlayer(...){...}
}
Server Script
public class AeServer : MonoBehaviour {
void Awake() {
gameObject.name = "InstanceServer";
gameObject.AddComponent(typeof(NetworkView));
networkView.group = 1;
networkView.observed = null;
networkView.stateSynchronization = NetworkStateSynchronization .Off;
}
...
[RPC]
public void Login(string login, string password, NetworkMessageInfo msgInfo) {
//get player from database
AePlayer player = storage.GetPlayerByLogin(login);
if(player != null) {
if (player.password.Equals(password)) {
// for test only
Vector3 position = Vector3.one;
Quaternion rotation = Quaternion.identity;
networkView.RPC("InstantiateLocalPlayer", null, position, rotation);
}
}
}
}
Result is
RPC call failed because the function 'Login' does not exist in the any script attached to'Client'
UnityEngine.NetworkView:Internal_RPC_Target(NetworkView, String, NetworkPlayer, Object[])
UnityEngine.NetworkView:Internal_RPC_Target(NetworkView, String, NetworkPlayer, Object[])
UnityEngine.NetworkView:RPC(String, NetworkPlayer, Object[]) (at C:\builds\unity-trunk\unity\Runtime\Export\Generated\Networking.cs:185)
AeClient:OnConnectedToServer() (at Assets\Scripts\Engine\AeClient.cs:65)
[..\..\Runtime\Network\PackMonoRPC.cpp line 169]
:?: 1. I don’t understand why Unity trying to run “Login” method on my “Client”.
:?: 2. Am I understand correctly that
networkView.RPC( "Login", RPCMode.Server, login, password);
and
networkView.RPC( "Login", Network.connections[0], login, password);
are equivalent on the Client side?