私は小さなマルチプレイヤー 2D プラットフォーマー ゲームに取り組んでいます。ネットワーク全体でアニメーション、動き、反転スプライトを複製することができましたが、理解できないバグがあります。スプライトをフリップするためのコードは、ホストにとって完璧に機能します。彼は、他のプレイヤーが左または右に曲がるときにサイドが切り替わるのを見ることができますが、他の誰もがホストのフリップを見ることはできません。また、3 番目のプレーヤーは 2 番目のプレーヤーのターンなどを見ることができません。何かが正しくないので、誰かが私のコードを見てくれれば幸いです。
メインPlayerスクリプトのコード:
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;
}
}
編集:
プレーヤー
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;
}