我试图在玩家击中屏幕时产生子弹。当我在配对中制作服务器时,我可以生成子弹,我也可以在客户端看到它们。但是,当我在匹配时将客户端连接到服务器时,我无法生成子弹。我在服务器端遇到了这个错误:
在播放器(克隆)>(UnityEngine.GameObject)上找不到传入[Command:InvokeCmdCmd_Fire]的行为,服务器和客户端应具有相同的NetworkBehaviour实例[netId = 2]。
UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()
我的代码:
for (int x = 0; x < Input.touchCount; x++)
{
touchpos = Camera.main.ScreenToWorldPoint(touch[x].position);
if ((touchpos.x > -4.5f || touchpos.y > -1.2f))
{
pos = transform.position;
if (magazine > 0)
{
if (time > firetime && autoriffle)
{
Cmd_Fire();
time = 0;
magazine--;
}
time += Time.deltaTime;
}
[Command]
void Cmd_Fire()
{
GameObject bullet = Instantiate(bulet, pos, Quaternion.FromToRotation(Vector3.up, new Vector3(touchpos.x, touchpos.y, transform.position.z) - transform.position)) as GameObject;
bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.up * bulletspeed, ForceMode.Impulse);
NetworkServer.Spawn(bullet);
// I try NetworkServer.SpawnWithClientAuthority(bullet, connectionToClient); too but same reason
}
我的播放器预制件上有这个脚本。我添加了播放器和子弹预制网络身份和网络转换。在玩家我检查了本地玩家权限。
我还尝试创建一个新项目,我从官方的Unity多人游戏网络教程中放置了所有内容,但它也没有用。
感谢您的帮助。
答案 0 :(得分:0)
我明白了。如果它没有附加到本地播放器,我正在销毁这个脚本。我应该只做 -
if(!isLocalPlayer)
return;`
不是
if(!isLocalPlayer)
{
Destroy(this);
return;
}