Я работаю над небольшой многопользовательской платформой 2d. Мне удалось заставить его копировать анимацию, перемещение и перелистывание спрайтов по сети, но у меня есть ошибка, из-за которой я не могу опустить голову. Код для flipping спрайтов отлично работает для хоста - он может видеть, как другие игроки переключают стороны при повороте влево или вправо, но все остальные не могут видеть флип. Также третий игрок не может видеть поворот второго игрока и т. Д. Что-то не так, и было бы здорово, если бы кто-то мог взглянуть на мой код.Unity Networking: перелистывание спрайтов в многопользовательском режиме не переворачивает хост
код в главном игрока сценария:
if (input.x > 0 && !facingRight)
{
FlipSprite();
GetComponent<Player_SyncPosition>().FlipSprite();
}
else if (input.x < 0 && facingRight)
{
FlipSprite();
GetComponent<Player_SyncPosition>().FlipSprite();
}
код в дополнительном Player_SyncPosition скрипт на игрока:
[ClientCallback]
public void FlipSprite()
{
if (isLocalPlayer)
{
CmdFlip();
}
}
[Command]
void CmdFlip()
{
if (!isLocalPlayer)
{
print("Switching sides");
facingRight = !facingRight;
Vector3 SpriteScale = GetComponent<Transform>().localScale;
SpriteScale.x *= -1;
GetComponent<Transform>().localScale = SpriteScale;
}
}
Edit:
игрока
Player_SyncPosition pSync;
void Awake()
{
pSync = GetComponent<Player_SyncPosition>();
}
void Update()
{
if ((input.x > 0 && !pSync.facingRight) || (input.x < 0 && pSync.facingRight))
{
pSync.FlipSprite();
}
}
Player_SyncPosition
[SyncVar(hook = "FaceDirCallback")]
public bool facingRight = true;
[ClientCallback]
public void FlipSprite()
{
if (isLocalPlayer)
{
CmdFlip();
}
}
[Command]
void CmdFlip()
{
print("Switching sides");
facingRight = !facingRight;
Vector3 SpriteScale = transform.localScale;
SpriteScale.x *= -1;
transform.localScale = SpriteScale;
}
void FaceDirCallback(bool newValue)
{
print(facingRight);
print(newValue);
facingRight = newValue;
}
Не используйте GetComponent. Когда вы инициализируете объект (например, в Start() или Awake(), используйте getcomponent там и сохраняйте его как локальную переменную. Получение преобразования каждый раз бессмысленно. Кроме того, вы можете использовать this.transform. –
Является ли ' Player_SyncPosition' второй кодовый блок – user3071284
Выполнено, но это оптимизация, правда? Не исправлена моя проблема. @ user3071284 Да, это –