I started working with Unity's HLAPI and began with a short tutorial to understand how client and server interact: https://www.youtube.com/watch?v=9VW7ctwvNok&t=458s but I'm getting an error when I call my Commands that don't show up in the tutorial.
Trying to send command for object without authority. UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter, Int32, String) PlayerController:CallCmdSendClientName(String) PlayerController:Start() (at Assets/Scripts/PlayerController.cs:87)
Trying to send command for object without authority. UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter, Int32, String) PlayerController:CallCmdSendClientPos(Vector3) PlayerController:Start() (at Assets/Scripts/PlayerController.cs:88)
I have a player prefab that has a NetworkIdentity script and my PlayerController script attached to it so I'm unsure why I'm getting this error. Any help would be greatly appreciated. Thank you!
public class PlayerController : NetworkBehaviour {
public GameObject bulletPrefab;
public Transform bulletSpawn;
public string playerName;
public Vector3 playerPos;
public byte[] Tex; // data coming from CanvasController
public int texWidth;
public int texHeight;
public string Type; // data coming from CanvasController
public string Id; // data coming from GameManager
public int Strength; // data coming from PlayerController
public int Hitpoints; // data coming from PlayerController
public bool IsAlive; // data coming from PlayerController
private string GetPlayerName()
{
switch (Network.player.ipAddress.ToString())
{
case "192.168.1.160":
playerName = "SMO Server";
break;
case "192.168.1.161":
playerName = "SMO Client 1";
break;
case "192.168.1.162":
playerName = "SMO Client 2";
break;
case "192.168.1.163":
playerName = "SMO Client 3";
break;
case "192.168.1.164":
playerName = "SMO Client 4";
break;
default:
playerName = "SMO UNREG";
break;
}
return playerName;
}
private Vector3 GetPlayerPos()
{
switch (Network.player.ipAddress.ToString())
{
case "192.168.1.160":
playerPos = new Vector3(0, 0, 0);
break;
case "192.168.1.161":
playerPos = new Vector3(-8, 0, 0);
break;
case "192.168.1.162":
playerPos = new Vector3(-3, 0, 0);
break;
case "192.168.1.163":
playerPos = new Vector3(3, 0, 0);
break;
case "192.168.1.164":
playerPos = new Vector3(8, 0, 0);
break;
default:
playerPos = new Vector3(0, 3, 0);
break;
}
return playerPos;
}
private void Start()
{
if (!isServer)
{
CmdSendClientName(GetPlayerName());
CmdSendClientPos(GetPlayerPos());
}
}
[Command]
void CmdSendClientName(string name)
{
RpcUpdateClientName(name);
}
[ClientRpc]
void RpcUpdateClientName(string name)
{
transform.name = name; // Change player name;
}
public override void OnStartLocalPlayer()
{
GetComponent<MeshRenderer>().material.color = Color.blue;
}
[Command]
void CmdSendClientPos(Vector3 pos)
{
RpcUpdateClientPos(pos);
}
[ClientRpc]
void RpcUpdateClientPos(Vector3 pos)
{
transform.position = pos;
}