- Home /
Sending image data through SyncVar doesn't work (Mirror Networking)
When SetTexture is run on the host it displays the sprite and works correctly, however on the client it displays this error:
SetPixels32 called with invalid number of pixels in the array UnityEngine.Texture2D:SetPixels32 (UnityEngine.Color32[])
Mirror.NetworkReaderExtensions:ReadTexture2D (Mirror.NetworkReader) (at Assets/Mirror/Runtime/NetworkReaderExtensions.cs:343)
Player:DeserializeSyncVars (Mirror.NetworkReader,bool)
Mirror.NetworkBehaviour:OnDeserialize (Mirror.NetworkReader,bool) (at Assets/Mirror/Runtime/NetworkBehaviour.cs:979)
Mirror.NetworkIdentity:OnDeserializeSafely (Mirror.NetworkBehaviour,Mirror.NetworkReader,bool) (at Assets/Mirror/Runtime/NetworkIdentity.cs:1022)
(And more but I think the more important thing in the error is the first line)
This is the code: basically users can choose an image of their computer, which is stored in the networkManager.clientProfile variable. The image is sent to the server, and the texture variable changes, so the hook code should change the sprite for all clients.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Mirror;
public class Player : NetworkBehaviour
{
[HideInInspector]
public SpriteRenderer spriteRenderer;
[SyncVar(hook = nameof(SetTexture))]
Texture2D textureSprite;
void SetTexture(Texture2D oldTexture, Texture2D newTexture)
{
Sprite newSprite = Sprite.Create(newTexture, new Rect(0, 0, newTexture.width, newTexture.height), new Vector2(0.5f, 0.5f), 256);
spriteRenderer.sprite = newSprite;
}
public override void OnStartClient()
{
base.OnStartClient();
// networkManager.clientProfile is a Texture2D stored locally
CmdSetSprite(networkManager.clientProfile.EncodeToPNG());
}
[Command]
void CmdSetSprite(byte[] bytes)
{
if (bytes != null)
{
Texture2D tex = new Texture2D(5, 5);
tex.LoadImage(bytes);
textureSprite = tex;
}
}
}
Your answer
Follow this Question
Related Questions
Uploaded sprite can't set bones and poses 1 Answer
How to use "Sprite" with Mirror 0 Answers
Loading texures from client-owned PNG files in Mirror 0 Answers
Difference between Sprite and Default texture types? 0 Answers
[Mirror Networking] NullReferenceException on player when trying to start server a second time 1 Answer