まず、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という名前で保存しAssets/NatShare/Plugin/iOS/libNatShareというiOS用ライブラリのImportSettingが
現時点では何故かAnyPlatformにチェックが付いてるので
Any Platformのチェックを外し、iOSだけをオンにします。
スクリーンショットを撮るボタンに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は消す
などの処理をしてからスクショ撮影するなどしてます。