Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@divideby_zero

Unity(WebGL)から簡単にGyazoAPIを使って画像をアップロードする

More than 3 years have passed since last update.

0.まず

技術的なところはここに書いたので、それを簡単に使えるように https://github.com/divide-by-zero/GyazoUploader にまとめました。

以下、使い方になります。

注意:Unity2017.3以降じゃないと動きません

1.GyazoAPIのAccessToken取得

は、 この通りに。 

2.Unity側準備

https://github.com/divide-by-zero/GyazoUploader/releases から、GyazoUpload.unitypackageをダウンロードして、使いたいプロジェクトにインポートしてください
image.png

適当なシーンにGyazoUploader/Prefabs/GyazoUploadManager を配置
image.png

※空のGameObjectを配置して、GyazoUploader/Scripts/GyazoUploadManager.csを自分でアタッチしても良いです

inspectorのAccessTokenに、1.で取得したAccessTokenを記入。
image.png

Is Debug Log Output はチェックを入れると微妙に通信のログが出力されます。デバッグ時にどうぞ。

3.さぁ、画像をアップロードしよう

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[]を渡せれるようになっているので、そちらを使用してください。

4.オススメな使い方

上記のコールバック形式でもいいんですが、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プロパティ

に格納されます。便利ー。

ぼやき

これで、gyazo側がtwitterカードに対応してくれたりすればtwitter共有した時なんかにリンクを開かなくても画像が見れて良いんですけどねー。

ではでは。

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
divideby_zero
プログラマやったり、専門学校教員やったり、ゲーム業界叩いてみたりしましたが、結局またプログラマやってます。 XamarinとUnityが好き。というよりC#が好きっぽい。
unity-game-dev-guild
趣味・仕事問わずUnityでゲームを作っている開発者のみで構成されるオンラインコミュニティです。Unityでゲームを開発・運用するにあたって必要なあらゆる知見を共有することを目的とします。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?