Last active
January 3, 2016 11:49
-
-
Save GRGSIBERIA/8459112 to your computer and use it in GitHub Desktop.
レンダーテクスチャーをPNG化して,そのバイナリをサーバに送る
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System.Collections; | |
using System.Text; | |
using System; | |
using System.IO; | |
using System.Collections.Generic; | |
using System.Security.Cryptography; | |
using System.Linq; | |
public class ScreenShotScript : MonoBehaviour { | |
void Start() | |
{ | |
} | |
// リクエストを待つ | |
IEnumerator WaitForRequest(WWW www) | |
{ | |
yield return www; | |
} | |
// POSTメソッドでとあるURLに送信する | |
public WWW Post(string url, Dictionary<string, string> parameters) | |
{ | |
var form = new WWWForm(); // フォームを作ってPOSTのパラメータを作る | |
foreach (var kv in parameters) | |
form.AddField(kv.Key, kv.Value); | |
var www = new WWW(url, form); // 通信用ソケットの作成 | |
StartCoroutine(WaitForRequest(www)); // ここで通信,仕組みが謎 | |
return www; | |
} | |
// スクリーンショットを撮ってバイナリを返す | |
byte[] CaptureScreenShot() | |
{ | |
// テクスチャの作成 | |
var render_tex = new RenderTexture(Screen.width, Screen.height, 24); | |
var tex2d = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); | |
// レンダーテクスチャの設定 | |
camera.targetTexture = render_tex; | |
camera.Render(); | |
RenderTexture.active = render_tex; | |
tex2d.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); // 実質的にここで撮影する | |
// 撮影し終わったので後処理する | |
camera.targetTexture = null; | |
RenderTexture.active = null; | |
Destroy(render_tex); | |
return tex2d.EncodeToPNG(); | |
} | |
// 特定の文字列をMD5に変換して返す | |
string EncodeMD5(string name) | |
{ | |
var crypt = new MD5CryptoServiceProvider(); | |
var name_bytes = Encoding.UTF8.GetBytes(name); | |
var crypted_bytes = crypt.ComputeHash(name_bytes); // ここで時間をハッシュに変える | |
crypt.Clear(); | |
return BitConverter.ToString(crypted_bytes).ToLower().Replace("-", ""); | |
} | |
// ファイル名を生成する | |
string GenerateFileName() | |
{ | |
string key_name = System.DateTime.Now.ToString() + Time.realtimeSinceStartup; // 現在の時間と起動時間からファイル名を生成する | |
return EncodeMD5(key_name) + ".png"; // 最後にSHA2に変換する | |
} | |
// アップロードするよー | |
string UploadFile(byte[] png) | |
{ | |
const string s3_url = "http://s3-ap-northeast-1.amazonaws.com/fukuwarai/"; | |
var file_name = GenerateFileName(); | |
// パラメータの設定 | |
var parameters = new Dictionary<string, string>(); | |
parameters["fname"] = file_name; | |
parameters["data"] = Convert.ToBase64String(png); | |
// 送信してURLを返す | |
var response = Post("localhost:4567/post", parameters); | |
return s3_url + file_name; | |
} | |
void Capture() | |
{ | |
captureFlag = true; | |
} | |
void Update() | |
{ | |
} | |
bool captureFlag = false; | |
// ここじゃないとうまくキャプチャできないらしい | |
void LateUpdate() | |
{ | |
if (captureFlag) | |
{ | |
var png = CaptureScreenShot(); | |
UploadFile(png); | |
captureFlag = false; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment