- Home /
How to share large image (Texture2d) across photon network?
In my mobile game, one user takes a picture and then shares it with all other players so that the image can be saved to the raw image on everyone's phones so they can vote on that image. I am doing this by converting the image to byte[] and calling an RPC for all that applies the texture to the raw image. However, the image seems to be too large of a file to share and it crashes the room and does not send. I am trying to find a solution to this by maybe saving the image to the cloud and loading it on other devices or serializing the raw image but I don't know how to do this. Can anyone please help me out to share the image across the network?
Here are the relevant parts of my script,
public class PlayerInfo : MonoBehaviourPun
{
public Text elimSelectText;
public Player selectedPlayer;
private Transform choosePlayersContainer;
public AspectRatioFitter sharePhotoAspectFitter;
public NatSuite.Examples.MiniCam cam;
public RawImage photoPanel;
public PhotonView votePView;
public Texture2D receivedTexture;
public RawImage sharePhotoPanel;
public GameObject voteElimPanel;
private GameObject chooseListingPrefab;
private void Update(){
if(cam.isCapturing){
cam.isCapturing=false;
openElimSelect();
}
}
public void openElimSelect(){
photoPanel.texture = cam.previewTexture;
photoAspectFitter.aspectRatio = cam.previewTexture.width / (float)cam.previewTexture.height;
elimSelectHold.SetActive(true);
listPlayersToChoose();
}
public void openElimSelect(){
photoPanel.texture = cam.previewTexture;
photoAspectFitter.aspectRatio = cam.previewTexture.width / (float)cam.previewTexture.height;
elimSelectHold.SetActive(true);
listPlayersToChoose();
}
void listPlayersToChoose(){
foreach(Player player in PhotonNetwork.PlayerList){
if(getAlive(player)){
GameObject tempListing = Instantiate(chooseListingPrefab, choosePlayersContainer);
Text tempText = tempListing.transform.GetChild(0).GetComponent<Text>();
tempText.text = player.NickName;
Button button= tempListing.gameObject.GetComponent<Button>();
button.onClick.AddListener(()=>{
votePView.RPC("selectedPlayerForVote", RpcTarget.All, player, cam.previewTexture.EncodeToPNG(), cam.previewTexture.width, cam.previewTexture.height);
elimSelectHold.SetActive(false);
ClearElimSelectPlayerListings();
Texture2D.Destroy(cam.previewTexture);
});
}
}
}
[PunRPC]
private void selectedPlayerForVote(Player player, byte[] receivedByte, int width, int height){
selectedPlayer = player;
receivedTexture = new Texture2D(1, 1);
receivedTexture.LoadImage(receivedByte);
sharePhotoPanel.texture = receivedTexture;
sharePhotoAspectFitter.aspectRatio = width / (float)height;
isVoting = true;
elimSelectText.text = "Is this " + player.NickName + "?";
voteElimPanel.SetActive(true);
}
Thank you in advance!
Yes, I have been trying to do this for so long please anyone?
Your answer
Follow this Question
Related Questions
hi i need help with code 1 Answer
RPC in unity with Photon not working 2 Answers
Photon RPC problem... 3 Answers
PhotonView with ID has no method marked with the [PunRPC](C#) property! BUT IT HAS ??? 1 Answer
Unity multiplayer solutions: Photon, Unity Networking - what else and in what way is good? 0 Answers