2018年7月20日金曜日

UnityでスクリーンショットをSNSにシェアする簡単なやり方

無料で、自分の中では一番簡単にできると思ってる方法です。

まず、NatShare APIをアセットストアからダウンロードしてインポートします。
https://assetstore.unity.com/packages/tools/integration/natshare-mobile-sharing-api-117705

Assets/NatShare/Plugin/iOS/libNatShareというiOS用ライブラリのImportSettingが
現時点では何故かAnyPlatformにチェックが付いてるので
Any Platformのチェックを外し、iOSだけをオンにします。
(将来的にアセットの方で修正されるかと思います。)




次のスクリプトをScreenShotShare.csという名前で保存し
スクリーンショットを撮るボタンにAddComponent(スクリプトからでもエディタからでもOK)しておきます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

// RequireComponentは、このMonoBehaviourはButtonを必須としますよ、という意味
[RequireComponent(typeof(Button))]
public class ScreenShotShare : MonoBehaviour {
    Button button;

    private void Start()
    {
        button = gameObject.GetComponent<Button>();

        // クリックしたらコルーチンを実行するようイベントに追加する
        button.onClick.AddListener(StartScreenShot);
    }

    void StartScreenShot()
    {
        // コルーチンを実行
        StartCoroutine(Screenshot());
    }

    IEnumerator Screenshot()
    {
        // 連続でボタンが押されないようにボタンを無効化しておく
        button.interactable = false;

        // レンダリングが全部終わるまで待つ(待つとはいっても、1フレーム以内の話だけど)
        yield return new WaitForEndOfFrame();

        // スクリーンと同じ大きさでTexture2Dを作る
        var texture = new Texture2D(Screen.width, Screen.height);

        // スクリーンのレンダリング結果を全部Texture2Dで読み取る
        texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);

        // Applyは、Texture2Dへの変更を適用するためのメソッド
        texture.Apply();

        // NatShare APiのシェアメソッドを、今撮影したテクスチャと、テキストと一緒に呼び出す
        NatShareU.NatShare.Share(texture, "Share Text");

        // もうtextureはいらないので消す
        GameObject.Destroy(texture);

        // ボタンを再度有効化しておく
        button.interactable = true;
    }
}

スクリーンショットを撮るのにApplication.CaptureScreenshotを使う方法もあるのですが
それをシェアするとなると、色々と面倒なことが増えるので、個人的にはあまりおすすめできません。


ここに示したのはサンプルで、実際の自分のゲームではシェア前に
ゲームプレイに必要だけど、シェア時に必要じゃなさそうなUIは消す
などの処理をしてからスクショ撮影するなどしてます。

0 件のコメント:

コメントを投稿