Я создаю многопользовательскую игру Runnig Race в Unity3D с использованием UNET. У меня сразу 2 игрока бегают в игре Subway Surfer. Я хочу обновить позицию игрока во время работы, кто первый, а кто второй, и наоборот, код работает для Host Player, но не обновляет позицию другого игрока. Пожалуйста, помогите мне, что я делаю неправильно.
Вот мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class PlayerPosition : NetworkBehaviour {
GameObject[] Players;
Vector3 playerPos;
void Start () {
InvokeRepeating("UpdatePosition", 0.5f, 0.5f);
}
void UpdatePosition () {
if (!isLocalPlayer)
return;
ClientPositionCalls();
}
[Client]
void ClientPositionCalls()
{
CmdServerPosition();
}
[Command]
public void CmdServerPosition()
{
Position();
}
[Server]
public void Position()
{
playerPos = transform.position;
RpcPosition(playerPos);
}
[ClientRpc]
void RpcPosition(Vector3 pos)
{
if (isLocalPlayer)
{
playerPos = pos;
Players = GameObject.FindGameObjectsWithTag("Player");
foreach (GameObject p in Players)
{
if (p.transform.position.z < pos.z)
PlayerCanvas.canvas.WritePositionText("1");
else
PlayerCanvas.canvas.WritePositionText("2");
}
}
}
}
isLocalPlayer
и как его установить? - person Ryanas   schedule 28.03.2018isLocalPlayer
всегда верно для клиента внутри методаRpcPosition
. Возможно, попробуйте обойти метод сервера и просто выполните Command и ClientRpc и посмотрите, сработает ли это. - person Dtb49   schedule 28.03.2018if(isLocalPlayer)
вRpcPosition
? - person Dtb49   schedule 29.03.2018