LoginSignup
1
1

More than 3 years have passed since last update.

オブジェクトのテクスチャを送信して、画像として保存する

Last updated at Posted at 2021-01-25

Unityでホワイトボードのようなもの作ってた時に使ってた。

大まかな流れ

1.対象のGameObjectを取得。
2.保存したいTextureを取得。
3.取得したTextureをバイト配列に変換。
4.サーバ上のphpに送信する。
5.phpで受信したバイト配列を画像に戻して保存する。
→受信側のphpは以前書いた記事そのまんまなので以下参照
pythonで画像を送信、phpで保存する
以上。

全体のソースコード

SendPic.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using UnityEngine.Networking;

public class SavePic : MonoBehaviour
{
    Texture2D texture;
    byte[] picData;

    public void SendPic()
    {
    //1.対象のGameObjectを取得。
    //Find()だったり、FindGameObjectWithTagだったり、インスペクターから直接指定したりなどなど
        GameObject _wb = GameObject.FindGameObjectWithTag("Whiteboard");

    //2.保存したいTextureをGameObjectから取得し、
    //3.取得したTextureをバイト配列に変換。
        texture = (Texture2D)_wb.GetComponent<Renderer>().material.mainTexture;

    //SendDataを呼び出す(コルーチンというらしい)
        StartCoroutine(SendData(picData));
    }
    IEnumerator SendData(byte[] postData)
    {
    //4.サーバ上のphpに送信する
        String url = "https://hagehoge/pic_save.php";//httpにandroid端末から送る場合はパーミッション関連で何か必要だったような・・・
        var request = new UnityWebRequest(url, "POST");
        request.uploadHandler = (UploadHandler)new UploadHandlerRaw(postData);
        request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "image/png");

        yield return request.Send();
    }
}

実際やるとどんな感じなの

お絵かきして送信する。
image.png

WinSCP(FTPツール)で見てみるとこんな感じ。ちょっと細くなってるのは落書きに使ったPlaneは1.5倍に引き伸ばされてたため。
image.png

参考

・Photon Unity Networking 2 (PUN2) のRPCとRaiseEventを使ってテクスチャデータを送信する
https://nabla-tech-lab.hatenablog.com/entry/2019/05/15/180000

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1