画像共有サービスgyazoへのアップロード
以下、使い方になります。
注意:Unity2017.3以降じゃないと動きません
まず、Gyazoのユーザーが無いとどうしようもないので、登録はしておいてください。 その後 https://gyazo.com/api へ行き、「アプリケーションを登録」
「New Application」のボタンを押し、NameとCallbackURLを入れます。 Nameには自分の好きな名前を。今回は「UnityWebGLImageUpload」としました。 CallbackURLは適当に入れました。よくわかってません。
Submitして作られたApplication名をクリックして、認証情報表示画面へ。 Your access token の下に「Generate」のボタンがあると思うので、クリックして、AccessTokenを生成。
↓
このAccessTokenによって画像アップロードの認証をするので、コピーしてメモ帳にでも取っておきます。 (もちろん、もう一度この画面を開けば確認できますし。「Regenerate」で再生成も出来ます。)
https://github.com/divide-by-zero/GyazoUploader/releases から、GyazoUpload.unitypackageをダウンロードして、使いたいプロジェクトにインポートしてください
適当なシーンにGyazoUploader/Prefabs/GyazoUploadManager を配置
※空のGameObjectを配置して、GyazoUploader/Scripts/GyazoUploadManager.csを自分でアタッチしても良いです
inspectorのAccessTokenに、1.で取得したAccessTokenを記入。
Is Debug Log Output はチェックを入れると微妙に通信のログが出力されます。デバッグ時にどうぞ。
GyazoUploader
を使って実際に画像(ScreenShot)をアップロード出来ます。
例えば、画面をクリックした瞬間のスクリーンショットを取得してアップロードそアップロード結果をブラウザで表示するのであれば以下のように書きます。
using DivideByZero.Gyazo;
using UnityEngine;
public class GyazoUploadTest : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButtonDown(0))
{
var uploader = new GyazoUploader();
uploader.UploadScreenShotAsync((response, error) => {
if (string.IsNullOrEmpty(error)) //errorがnullなら正常終了
{
Application.OpenURL(response.url); //とりあえずブラウザで開く
}
});
}
}
}
このUploadScreenShotAsync
は勝手にスクリーンショットを取得してjpgデータにしてgyazoにアップロードまでしてくれます。やったね。
なお、アップロード結果はコールバックの1つ目のresponseに色々と入っています。(詳しくはソースを見てね!!)
また、コールバックの2つめのstringにはエラー内容で、正常時はnullなので成否判定に使ってください。
(例ではstring.IsNullOrEmpty
使ってますが、ただのnullチェックでもいいはず)
大体の用途はこれだけで済みそうですが、自分で加工したjpgデータなんかも送リたい場合はUploadJpegByteDataAsync
で、byte[]を渡せれるようになっているので、そちらを使用してください。
上記のコールバック形式でもいいんですが、1つコルーチンで囲う方が直感的(UnityEngine.WWWと同じ使い方)なので、オススメです。
using System.Collections;
using DivideByZero.Gyazo;
using UnityEngine;
public class GyazoUploadTest : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButtonDown(0))
{
StartCoroutine(UploadIterator());
}
}
private IEnumerator UploadIterator()
{
var uploader = GyazoUploadManager.CreateGyazoUploader(); //これでも作れるけど new GyazoUploader()の方が短いって言う・・・
yield return uploader.UploadScreenShotAsync(); //待機可能
if (uploader.IsError)
{
Debug.Log(uploader.ErrorMessage); //エラーメッセージ表示
}
else
{
Application.OpenURL(uploader.Result.url);
}
}
}
エラー有無は IsError
プロパティ
エラー内容は ErrorMessage
プロパティ
成功時の結果は Result
プロパティ
に格納されます。