まず、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は消す
などの処理をしてからスクショ撮影するなどしてます。


0 件のコメント:
コメントを投稿