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

2018年7月4日水曜日

UTS2を超シンプルなインスペクターに変更するエディタ拡張

概要


ユニティちゃんトゥーンシェーダーを使いたいけど、パラメータ多い!
影色テクスチャとか作るのめんどくさい!
既存の3Dモデルをぱぱっとユニティちゃんシェーダーに変更したい!


という、めんどくさがりな自分用に
マテリアルの変換機能、影色テクスチャ生成機能
自分が必要なパラメータだけ抜き出したカスタムインスペクタ拡張を作りました。

これを使うと下のgif画像のように、とんでもなく長いインスペクタが、とてもコンパクトになります。


自分用に作ったのですが、せっかくなので公開します。
エディタ拡張のソースも入ってるので、好きなように改造も出来ます。

注意事項


この拡張は、マテリアルを直接変更し、テクスチャも自動生成されます。
バックアップをとっておくか、最初はテスト用プロジェクトで実験してみましょう。


インストール方法


ここからUnityパッケージをダウンロードしてください。
https://www.dropbox.com/s/v8jl4t5d06vcoja/uts2easyinspector.zip?dl=0
(2018/7/5 15:40追記 一度生成された影色テクスチャがある場合に二度目が生成されないバグを修正いたしました)

ダウンロードしたらzipを解凍後、使いたいプロジェクトにパッケージを導入しましょう。

ユニティちゃんシェーダーでカスタムマテリアルインスペクタを使えるようにするには、シェーダーの書き換えが少し必要になります。
メニューの「Tools/UTS2簡単マテリアルインスペクタ/インストールする」を実行すると、自動で書き換えてくれます。

最初にダイアログが出てきますので、ユニティちゃんトゥーンシェーダーのあるフォルダを指定してください。

使い方


非UTS2マテリアルから、UTS2マテリアルへの変換


Mainテクスチャやノーマルマップが設定されているマテリアルに対し
プロジェクトフォルダでマテリアルを右クリック
メニューのTools/UTS2マテリアルに変換する、を実行します。
(複数同時でも大丈夫です)

マテリアルを直接変換し、影色テクスチャもメインテクスチャと同じフォルダに自動生成します。
(この機能だけでいいなら先程のUTS2簡単マテリアルインスペクタ/インストールする、は実行しなくてもいいです)



シェーダーはとりあえず、UnityChanToonShader/Toon_DoubleShadeWithFeatherが割り当てられるので、必要に応じて種類を差し替えてください。


簡単マテリアルインスペクタ


ユニティちゃんトゥーンシェーダーが割り当てられてるマテリアルは、次のようによく使いそうな項目だけを表示するようになります。


メインテクスチャの設定


メインのテクスチャは必ず指定してください。
メインのテクスチャがあれば、影色テクスチャを生成することができます。

影色テクスチャの設定


影色テクスチャの再生成ができます。
「一つ目の影色テスクチャを生成するボタン」を押してください。


このような、影色テクスチャ生成ダイアログが出てきます。
左がメインテクスチャ、右が変換された影用テクスチャです。

下の色相、彩度、明度をどのようにずらすか、を指定できます。

影色は、色相を少しずらし、彩度を高め、明度を少し落とすと、いい感じの影色になる気がします。
色々試してみていい影色を見つけてください。

いい影色になったら、下の「生成ボタン」を押します。
そうすると、無事影色テクスチャが生成され、マテリアルに割り当てられます。
(テクスチャはメインテクスチャと同じフォルダに生成されます)


他に影の大きさスライダーや、影のぼかし具合スライダーも表示してるので、これで影をどれくらいの面積、くっきりさせるかどうかを調節してください。

二つ目の影色テクスチャも同様の手順で割り当ててください。

アウトラインの設定


アウトラインの太さと色だけを設定できます。

ハイライトの設定


ハイライトの強さと色だけを設定できます。

リムライトの設定


リムライトの強さと色だけを設定できます。

その他の設定


簡単インスペクタは上に書かれた項目以外は設定できません。
これ以外に手を入れたい場合、インスペクタ一番上の「オリジナルのインスペクタに変更ボタン」を押して、値を調整してください。

アンインストール方法


メニューのTools/UTS2簡単マテリアルインスペクタ/アンインストールする、を実行してください。
インストール時に行ったシェーダーの一部書き換えを消去します。

その後はUTS2EasyInspectorフォルダを消去してください。


連絡先


何かあればTwitterまでどうぞ