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までどうぞ

2018年6月22日金曜日

UnityのGameViewのScaleを1に強制的に戻すエディタ拡張

UnityのGame Viewが勝手に拡大されるというMASAさんのツイートを見ました


そう言われてみると、思い返せば確かにプレイ時に手動でスケールを戻すことをよくしてる気がします。



非プレイ時にマウスのセンターホイールをスクロールするとここのスケールが変わるので、多分プレイボタンを押す際に間違ってセンターホイールに触れてるんじゃないかと推測してます。

プレイ時にスケールが拡大されてて戸惑うことはあってもうれしいことはほぼありません。
そこで、プレイ時に強制的にスケールを1に戻すエディタ拡張を書くことにしました。


UnityEditor.GameViewは公開されてないので、リフレクションを使ってアクセスします。
 
                var asm = typeof(Editor).Assembly;
                var type = asm.GetType("UnityEditor.GameView");
                EditorWindow gameView = EditorWindow.GetWindow(type);

というコードで、GameViewのインスタンスにアクセスできます。

問題は、GameViewのどの内部関数を呼べばスケールを1に出来るかです。

それを調べるために、GameViewのソースを見てみましょう
 https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/GameView/GameView.cs

Scaleに関することなので適当にScaleで文字列検索してソースを読むと、SnapZoomの引数を1で呼べばスケールが1に戻りそうな気がします。

試してみましょう。

#if UNITY_EDITOR

using UnityEditor;

static class GameViewUtil
{   
[InitializeOnLoadMethod]
    static void CheckPlaymodeState()
    {
        // プレイモードが変わったときのコールバックに登録する
        EditorApplication.playModeStateChanged += x =>
        {
            // Playモードに変わったときに処理する
            if (x == PlayModeStateChange.EnteredPlayMode)
            {
                var asm = typeof(Editor).Assembly;
                var type = asm.GetType("UnityEditor.GameView");
                EditorWindow gameView = EditorWindow.GetWindow(type);

                // GameViewクラスのSnapZoomプライベートインスタンスメソッドを引数1で呼び出す
                var flag = System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance;
                type.GetMethod("SnapZoom", flag, null, new System.Type[] { typeof(float) }, null).Invoke(gameView, new object[] { 1 });
            }
        };
    }
}

#endif
このコードをファイルに保存し、どこでもいいので配置します。
(Editorフォルダの中に入れるならば、#ifdef UNITY_EDITORは必要ありません)

そして実行してみると、Unity 2018.1では無事実行するたびにスケールが1に戻ることがわかります。

ただし、リフレクションで公開されてない内部関数にアクセスしてるため、バージョンが違うと動作しなくなることも十分ありえます。

おわり

2018年6月18日月曜日

Unity1week GameJamに参加しました


最近Unity 1週間ゲームジャムに参加しました

完成した作品がこちらです。



ゲームのネタについて

何かを薄く切っていくゲームを考えていたところ
ちょうどこちらのバズっていたとても面白いツイートを見て、題材はパンの薄切りゲームにすることにしました。

使用したアセットについて

Mesh Cut

このゲームで一番大事なメッシュを切り刻むことができるアセットです。
アセットストアにあるものをいくつか見て回ったのですが、どれも$30以上しました。
$30するアセットは、その値段に見合う豊富な機能を持ってることが多く、使い方の学習に多くの時間を取られがちです。
今回はこちらのMIT Licenseのコードを使わせていただくことにしました。
ソースが公開されてるおかげで、改造も可能で助かりました。

Realistic Bread

パンです。$2.69でナイフとまな板がついてきます。

ファンシーハートフォント

とてもかわいいフォントです。これをTextMeshProで使ってます。

効果音

かわせるかしら?などの掛け声も効果音ラボサイトのアセットを使わせていただきました。

音楽

タイトル画面とゲームオーバー時の音楽です。

実装について

パンを切る部分を光らせた


どこがどう切れるのか明示しないと納得感が薄かったので、パンに切られラインを表示しました。
このラインはパンのシェーダーに「シェーダーパラメーターで与えた面との距離を調べて、近いほど光らせる」という処理を入れて実現してます。

もっといい方法はあるはずですが、自分が一番手っ取り早くできそうな方法でやってます。
ゲームジャムですからね。

背景はスカイボックス

パン包丁まな板以外は普通にUnity標準の青空だったのですが、クッキング感を出すために背景をチッキンにすることにしました。
ただ、キッチンのモデルを本当に配置したら、容量、実行速度などに大きな影響がでます。
そこで、テラシュールブログさんの「背景をスカイボックスで表示する」と同じ手法を使いました。

別プロジェクトにキッチンモデルアセットをインポートし、そこでライトを焼き、キューブマップを撮影し、それをパン切りプロジェクトに移行してます。

キューブマップのサイズを256ぐらいにすると、なんか被写界深度っぽくなる上、サイズも大幅削減できました。



容量12MBまで削減

WebGLで実行するものは、やはり容量が少なければ少ないほどサーバーにもユーザーにも優しいはずです。

何が容量を占めているのか、勘で闇雲に作業してはコスパが悪いです。
そこで役に立つのがビルド後レポートツールです。
アセットストアにはそれ系のツールはいくつかありますが、自分はこれを使用してます。

Better Build Info - Report Tool



何が容量を占めているのか?を一覧で見たり、2次元の面積図で見れたりと、一気にわかりやすくなります。

自分のプロジェクトで大きかったファイルは「日中韓すべての文字が入ったフォント」
「パンモデルなどのテクスチャ」が多かったです。

フォントは、漢字などが出ないのはもう切り捨てて、「ふぁんしーはーとフォント」で全部表示するようにし、大きいフォントファイルは削除しました。
ランキングで登録する人も、アルファベットかひらがなカタカナ登録が多いようでしたので。
ゲームジャム作品ですし、ランキングで漢字が使えることより、容量が軽いほうがいいでしょう。

テクスチャは、問題がないレベルまで解像度を下げたり、無駄にアルファを使う設定になってるものはアルファを使わないように設定し直すなどしました。
無駄にアルファを使う設定になってると、圧縮フォーマットの関係でサイズが大きくなることがあります。

なぜ?実際にブラウザで実行したらメモリ不足で落ちちゃう

Editorでは落ちないのですが、クローム上で実際に動かすとパンを数枚切ったところで落ちたり落ちなかったりしてました。

Build時に使用メモリを指定することができるので、それを増やせばいい
というような安易な解決はせず、ちゃんと原因を探りました。

容量12MBまで削減して、メモリにのるアセットも少ないはずなのになぜ落ちるのか?
勘で調べるのは大変なので、もちろんUnity備え付けのプロファイラを使いました。

プロファイラをつけて実行してみると、パンを切った瞬間に60MB以上アロケートされ、即座に開放されてました。

Deep Profileをonにして実行すると、どの関数でメモリを消費してるのかもわかります。
ずばり、MeshCut.Cut関数の中でした。

ソースを読むと

_leftSide.AddTriangle(
 new Vector3[]{ _victim_mesh.vertices[p1], _victim_mesh.vertices[p2], _victim_mesh.vertices[p3] },
 new Vector3[]{ _victim_mesh.normals[p1], _victim_mesh.normals[p2], _victim_mesh.normals[p3] },
 new Vector2[]{ _victim_mesh.uv[p1], _victim_mesh.uv[p2], _victim_mesh.uv[p3] },
 new Vector4[]{ _victim_mesh.tangents[p1], _victim_mesh.tangents[p2], _victim_mesh.tangents[p3] },
 sub);

というコードがありました。

_victim_meshはUnityのMeshクラスです。
Meshクラスのverticesプロパティは、その見た目の印象と違い、内部の配列に直接アクセスしてるわけではなく、コピーした配列を作って返します。
そのため、「_victim_mesh.vertices[p1], _victim_mesh.vertices[p2], _victim_mesh.vertices[p3]」の部分だけでも3回配列がコピーされて即座に捨てられるということになっています。

悪いことにこれがfor文の中にあったので、メッシュ自体は数キロバイトでも、そのコピーが1フレーム中に1000回近く生成されていました。

そこで
            var mesh_vertices = _victim_mesh.vertices;
            var mesh_normals = _victim_mesh.normals;
            var mesh_uv = _victim_mesh.uv;
            var mesh_tangents = _victim_mesh.tangents;
というように、for文の外で変数に配列を代入して、mesh_verticesを使うよう置き換えました。
これだけでほとんど切った際にメモリを使わなくなりました。
MeshCutがオープンソースでありがたいところでした。

Unityのプロファイラはとても簡単で便利なので、それもとても助かりました。

最後に

今回は結構苦労することもなくサックり作れたのが良かったです。
こういうイベントに参加するのはいろいろと楽しいので、都合がよかったらまた出てみたいと思います。

2018年5月30日水曜日

クロンとゼリーをiOSとAndroidで公開いたしました




クロンとゼリーというスマホゲームをリリースいたしました。

かわいいクロンというなの猫の主人公がゼリーを吸いまくる
異色カワイイアクションパズルゲームです。

ネコが水に落ちないギリギリまでゼリーを吸いつくすのを競います。

簡単なルールでどなたでも遊べます。

縦画面、横画面でもプレイ可能です。

綺麗なグラフィック、着せ替え要素、オンライン対戦バトル、写真フィルタ機能など
色々な楽しさを詰め込んでいます。

基本無料ですのでお気軽にお試しください。





Get it on Google Play

2016年9月22日木曜日

第六回UE4ぷちコン作品を作りました


作品構想に一日、実装に数時間の「Flying Start」というゲームを作りました。
ネコがたくさん集まってフライイングスタート方式のレースを開催したというゲームです。

今回は東京ゲームショウがあったので時間がさけず、
締め切り日にサクっと作りました。

背景はサンプルのモノをほぼ未改造で使ってますし、
ネコのモデルとモーションはmixamo(少し前まで、ネコのモデルもあった)ものを使ってます。
マテリアルなども凝ってないですし、ライティングのビルドもする時間が無かったので、
左上に警告メッセージが出ています。

無事提出出来て良かったです。

2016年9月19日月曜日

TGS 2016にインディゲーム「ネコとゼリー cat and the jelly island」を出展しました


東京ゲームショウ2016にて、
ビジネスデー二日間、一般日二日間、計四日間の展示をいたしました。

展示したのは「ネコとゼリー」という、物理パズルアクションゲームです。



とても大変でしたけど
多くの人が熱中して遊んでくれている姿を見て
頑張って作っていく元気が出ました。

広告アプリで無料で配信予定です。

2016年6月24日金曜日

Unity VR EXPO AKIBAに当選しました


Unity VR EXPO AKIBA
http://events.unity3d.jp/vrexpoakiba/


こちらは当選しました!VR賽の河原、展示できます!

初めての展示となるので不安ですが、一度展示というのをやってみたかったので楽しみです。





VRの展示用ゲームは、展示に向いたゲーム性にする必要がありますので
誰でも説明なしにすんなり遊べるようにしたいと思います。

bitsummit落選しました





上のようなスマホゲームをbitsummintに応募したんですが、残念ながら落ちてしまいました。
正直、レベルクリア型のゲームは、ちょっと古いスタイルだったかもしれないなと思ってます。

とりあえず、7月中にリリースして、次のゲームを作りたいですね。

今までちょっとゲームをリリースするのは控えていたんですが
7月からはガンガン作って、ガンガンリリースしたいと思っています。

2016年6月23日木曜日

VRゲームの試作を三本ほどやりました


日本VRハッカソンというのが開催されるということで
テーマの「日本らしさ」にあっているであろうVRゲームを考えていたのですが
二日間にわたってデスクトップとViveを持ち込むのが大変そうすぎたので
参加が億劫になってしまいました。



しかし、せっかく考えたネタなので、作ってどこかに展示してみたいなぁ、と思い立ち
Unity VR EXPO AKIBAの締め切り日に突貫で作ってみました。
移動方法をテレポストーンにしたのは
全ての動作を「石をつかんで離す」に集約するためです。
複雑な操作は、あまり好みではありません。




出ないことにしたVRハッカソンですが
家で簡単に作れるものを作って参加してる気分を味わおうと、次のを作りました。

Vive上だと90fpsなので回転しているように見えるのですが
Twitterの動画にしてしまうと30fpsなので回転してるように見えなくなっちゃいました。




それから数日後、映画「貞子vs伽椰子」を見に行き、予想外に面白くて次のVRを試作しました。

この、引き寄せの移動方法は
あまり酔わない気がするので、何か他のゲーム作りにも使いたいと思いました。

貞子の前髪はUnity5のClothです。
カメラの上方向に取り付けただけです。


まだどれも一日でささっと作ってるので、実際に遊ぶと破綻が見えてしまいます。
これらは今後、何かしらでリリースするために、しっかり作っていきたいですね。

ただ、スマホアプリも作りかけのが何個かあるので、ささっと完成させていかないと…。

2016年6月12日日曜日

Unreal Engine 4とUnityの比較 2016/06/12版


「Unreal Engine 4とUnityの比較」ページのアクセス数がすごい多いです。

どっちでやるべきなのか多くの人が興味がありそう、ということで
今の時点でのUE4とUnityの、個人的な感想を書いてみます。

あくまでも個人的な感想です。

どっちも触ったことない人が趣味でやる場合どっち?

仕事で使う場合、仕事で使うエンジンを触るでしょうが
個人で触る場合、どっちがいいのか悩む人も多いでしょう。

企画職やアーティスト職など、非プログラマの場合

UE4の方がいいのではないかと感じてます。
理由としては、UE4はブループリントやマテリアルエディタなどで
ビジュアルスクリプティングが可能ですが、
これは初期学習難度がテキストスクリプティングに比べるとかなり低いためです。

Unityでも、PlayMakerやShaderForgeなどのアセットを購入することで
ビジュアルスクリプティングは可能になりますが、
エディタの出来、組み込みであることの利便性、情報の多さなどから
UE4が有利だと感じています。

プログラマの場合

Unityの方がいいのではないかと感じています。

ブループリントも、C++で組むより楽だと感じる部分もあるのですが、
C#はもっと楽にプログラミングできると、個人的には思います。

C++が大好きで、C++プログラミングがしたくてしょうがないなら、UE4の方が楽かもしれません。


また、もしUE4でやることに決めたのなら
C++部分も覚えることをお勧めします。

がっつりブループリントで組むのは、やめておいた方がいいと思ってます。

ブループリントで組んだ部分は、
単体テストの記述が困難で、リファクタリングは至難の業になります。
ステップ実行によるデバッグも思うようにいきません。

また、ノードにつないでいた線が消えたり、
パラメータがリセットされたりといった
エディタのバグなどに悩まされることも多いです。

色々な比較

モバイルゲームを作る場合どっち?

2Dゲームならばほぼ確実にUnityでしょう。
3DゲームもUI画面が多いならば、Unityが優位です。
UE4のUI作成まわりはとても貧弱なためです。

コンシューマ系のゲームを作る場合どっち?

自分がいたところでは、コンシューマ系では
Unityの選択肢はあがることすらありませんでした。
これが何故なのかはよくわかりません。

Unityのコンシューマ機の実績が少ないせいとか
昔のUnityで痛い目にあった人が多いとか、でしょうか。

個人的にはUnityでも
コンシューマゲーム開発は大丈夫だと思うのですが
確信はないです。

「UnityよりUE4の方がかっちりして作成できるので、
 大規模開発ではUE4の方が良いと思う」
という意見も聞いたことがあります。

エディタの安定性

以前、UE4はすごい落ちる、と書いたのですが
あの頃に比べると、今は落ちづらくなりました。

だいたい落ちる頻度は、Unityと同じくらいだと感じてます。
どちらも多くて一日に数回といった感じです。

アセットストア

以前、UE4のマーケットはすごく少ないと書いたのですが
UE4にもかなり増えてきました。品質も高いものが多く、
まだまだUnityより数は少ないですが、これからに期待できそうです。

エンジンの使用価格

UE4は、1 暦四半期ごとにゲーム 1 個につき
売り上げが$3000を超える額の5%のロイヤリティ方式です。
また、映像作品やアーケードゲームなどはロイヤリティがかかりません。


Unityは最近サブスクリプション契約オンリーになることが発表されました。

売り上げが年に$100000を超えなければ、無料でPersonal版が使えます。
それを超える場合、月額$125を払ってプロ版を契約する必要があります。

無料版ではUnityのスプラッシュスクリーンが出るので
それが嫌な場合もProを契約する必要があります。


趣味として使うならどちらでもお金がかかりませんが
ある程度儲かる場合は、どちらを使うかで、そこそこ金額が変わってきそうです。


2016年4月29日金曜日

第五回UE4ぷちコン 「アイドルマネー 愛の錬金術師」で工夫したこと


カメラ制御

アイドル候補との戦いのとき
カメラは「正対したとき」「叩いた瞬間」「倒れたとき」と
三つの状態があります。

アイドルごとに大きさが違ったり倒れるモーションを変えたりしてるので
カメラはそれぞれ調整できるようにする必要があります。

そこで今回は、ChildActorコンポーネントとしてカメラアクターを三つ持たせることにしました。



それぞれのChildActorコンポーネントに識別タグをつけて
Set View Target with Blendでカメラを切り替えてます。
カメラコンポーネントを使ってないのは、Set View Target with Blendのためです。




サイリュームの動き

サイリュームはインスタンシングメッシュを使い
マテリアルのWorldOffsetで左右に振ってます。
モデルは適当に作った三角柱メッシュです。



マテリアルはこんな感じなのですが
今回あまり考えず、結構テキトーに作ったので、あんまり参考にならないかもしれないです。


PerInstanceRandomノードを使えば、インスタンスごとにランダムな値が取得できるので
ライトの色をひとつづつ変えたり、動きの周期に個体差をつけたりできます。
https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/ExpressionReference/Constant/


モデルの首ふり

お札で顔を叩いたら顔が左右に揺れるようになってるのですが
これはモーションファイルは使わずに
アニメーションBPでTransfrom (Modify) Boneノードの
ローテーションに値を入れることで実現してます。



アイドルのマウスによる選択

マウスカーソルで選択したアイドル候補はリムライト的なものが付与されます。


これはPlayerController取得して、ConvertMouseLocationToWorldSpaceで
マウスの指している位置や方向を取得し、LineTraceForObjectノードで
当たっているアイドル候補モデルを取得します。

当たってるモデルが存在したら
SkeltalMeshのSetRenderCustomDepthでカスタムデプスを有効化します。




そして、ポストプロセスでカスタムデプスが有効になってる部分に対し
カメラベクトルと法線の内積をとって、それが90度になるほど色がつくようにしてます。

下のマテリアルがそれです。
上半分ぐらいがカスタムデプスに対する処理で、下半分はカーソルの表示処理を同時に行ってます。




高速移動の表現

操作キャラは瞬時に移動するのですが
高速移動している感を出すためにモデルを伸ばす処理と、集中線の表示をしてます。



モデルを伸ばす表現は、移動している方向ベクトルをマテリアルにパラメータとして渡し
それと法線の内積をとり、進行方向と逆になるほどWorld Offset Positionに
後ろ方向ベクトルを入れてます。


集中線はポストプロセスです。
だいたいこんな感じになってますが、ポストプロセスでやる意味は
正直あんまりないので詳しい説明は省きます。

自分は素材を作るのはめんどくさいと感じるのですが
シェーダーやマテリアルいじるのは大丈夫なので、無理やりこういうので実現しがちです。




お金

ビンタするごとにお金が空中に舞いちるのですが
これもマテリアルのWorld Position Offsetに値を入れて
ヒラヒラと見えるようにしています。

UI

UE4のUMGっぽくない感じになるように3Dっぽく傾けたり
マテリアルを工夫してアニメーションさせたりしていますが
ちょっと自分のセンスの無さが出ててつらい部分ですね。

4.11から、UserInterfaceのマテリアルにScreen Positionが追加されてるので
3Dぽくすること以外にも何か面白いUIの表示ができるかもしれません。






第五回UE4ぷちコン 「アイドルマネー 愛の錬金術師」応募


UE4のぷちコンというコンテストに応募して、最優秀賞をいただきました。

「街の人たちを金の力で愛に目覚めさせた後
アイドルグループを結成し、即日ライブを開催。

観に来てくれたファンからお金を荒稼ぎし
その荒稼ぎしたお金をつぎ込んで
本命のグレイちゃんを、特大の愛で目覚めさせよう」

という、インパクト重視のちょっとぶっ飛んだゲームにしました。




最初は街の人を札束で叩いていくアクションゲームの予定でしたが
作ってるうちに色々思いついて仕様が増えていき、今の形になりました。



今回使用したアセットを紹介します。

舞台となる街は、UE4ランチャーのラーニングタブにある
プラットフォーマーゲームのものを使いました。無料です。
そこそこ品質が良く、動作も軽いです。




ただし、地面や木などは、アップで見ると厳しかったため、マテリアルを変更してます。
これも自作ではなく、ShowDownサンプルや、Blueprintサンプルから移植してきました。




お金のテクスチャはLoot Packという有料アセットを使ってます。
このアセットは今回のゲームにピッタリだと思って買ったのですが、
結局お金のテクスチャしか使わず。




アイドル候補たちのモデルとモーションの多くはmixamoのものを使用しました。
mixamoのモデルは、UE4にインポートするとき
モデルが壊れるものがあって使用を断念したものもいくつかありました。





最後のラストアイドルには、UE4界のアイドル、Grayちゃんを使わせていただきました。
http://rarihoma.xvs.jp/products/graychan/




Grayちゃんに持たせてる拳銃はこちらの有料アセットを使用してます。
なんで拳銃を持たせたかというと、グレイマン用の無料で手に入るモーションが
銃を持ってるものばかりだったので仕方なく持たせました。


エフェクトはInfinityBladeEffectsのを何個か使用しました。
ハートのエフェクトは他の応募作品でもたくさん使われていましたね。


曲はフリー音楽素材/魔王魂さんの曲を使わせていただきました。
歌つきの曲もあって助かりました。
http://maoudamashii.jokersounds.com/


効果音は効果音ラボさんのを使わせていただきました。
http://soundeffect-lab.info/



たくさんのアセットのおかげで今回のゲームは完成しました。
アセット作者の皆様に圧倒的感謝です!

+.

2015年11月30日月曜日

Unityで動的なアニメパース効果をつける



前回の記事でUE4のアニメパースマテリアルを作りましたが、
Unityでも、あれと同じような頂点シェーダを書けば実現できます。
こんな感じに。



これを、Unityちゃんステージのシェーダーに埋め込んだのがこちら

UE4で動的なアニメパース効果をつける


@MuRo_CGさんのこのツイートを見て
UE4でもボーンの変形が可能なので、同じことができそうだなぁ。
と思い、自分でも試してみることに。

----

静的なシーンなら簡単にできそうでしたが
完全に同じだとチャレンジ性が薄いので、動的に実現することを目標にしました。

AnimBPの各ボーンにカメラが近づいたら大きくする仕組みを入れていきました…
が、指とかボーンがありすぎて面倒すぎて途中で挫折!

そもそも、剣とかボーンが無いものはどうするの?問題も発生。

発送を変えて、別の方法を考えてみることに。

-----

で、思いついたのがこちら。





マテリアルはこんな感じです。
http://blueprintue.com/blueprint/ime36fb8/
   

これをマテリアル関数として保存して、アニメパースかけたいモデルのマテリアルすべてに追加して、出力をワールドポジションオフセットにつなげます。

たくさんあるマテリアルに仕込んでいかないといけないので、
これはこれで面倒なんですよね。

ポストエフェクトなどでできないかも考えてます。

Unity版はこちら。Unity版のシェーダーサンプルコードにはコメントつけてます。
http://dofilabs.blogspot.jp/2015/11/unity.html

2015年11月8日日曜日

UE4でFur表現を試してみました


これは「シェル法」、つまりはポリゴンを層のように重ねて、毛を表現しています。
SimpleGrassWindで毛先を揺らしてます。

UnityだとPassがあるので、シェーダー一個書いて
それを割り当てるだけで、簡単に全身毛だらけにできるのですが
UE4のマテリアルだとPassが無いので、メッシュコーポネントをBPで複製しまくって
ダイナミックパラメータで層の位置を指定して描画してます。

今回のは力技実装なので、結構重いです。

あと、毛を長くしたり、
キャラの動き、平行移動や回転に合わせて毛先を揺らすのが
できなくはないですが難しいです。


THETA Sで東京 秋葉原を撮影

THETA Sで、東京秋葉原を撮影しました。
Feiyu Tech の Feiyu FY-G3 Ultra 3軸 手持ち撮影用ジンバル + 延長棒を使用してます。


スタビライザーと延長棒を使用しているおかげで
かなり揺れが低減されています。

電動スタビライザーは、一年ぐらい前だと
日本のAmazonでは5万円ぐらいと、かなり上乗せされていたんで
Surehobbyで三万ぐらいで購入したんですが、
今探してみると、値段が結構適正な感じになってるみたいです。



ただ、THETAは360度撮っているので
動画撮ってる時のTHETAの姿勢が取得できれば
スタビライザーに頼らずとも補正できるはずなので
標準でそのうちブレ補正機能が搭載れてもおかしくないかも。

2015年10月29日木曜日

Android wearのフェイスウォッチを三種類増やしました


今回、Real Material Watch Facesにフェイスを3種類追加しました。

・SF風
・モンスター猫目
・白黒テレビ風

動画で使用しているAndroid WearはHuawei Watchです。


また何かいいのが思いついたら追加したいと思います。

フェイスのGoogle Playのページはこちら
Real Material Watch Faces
https://play.google.com/store/apps/details?id=jp.dofilabs.realmaterialwatchfaces

2015年10月22日木曜日

UE4のぷちコンに応募しました



UE4、結構思い通りに使えるようになったので、ぷちコン作品を作って応募してみました。

ネットワークゲームで、魔法を撃ちあうゲームです。
相手の魔法の鏡文字を書くことで跳ね返すことができます。




結果は、残念ながらノミネートすらされず。

まぁこうしてみると、見た目しょぼいですし、当然の結果でした。
次は何らかの賞をもらえるようになるまで精進したいものですね。


--
文字列認識にはTesseract OCRを使いました。

Tesseract OCRのビルド方法は以下のサイトの通りにやりました。

また、3.0.3以降では、それより前の学習バイナリデータを食わせると落ちるので気をつけてください。

あと、UE4とDLLにしたTesseract OCRは、delete[]の実装が違うものになるようで
GetUTF8Textした文字列をdelete[]すると、その後落ちます。

なんとかして、delete[]の実装がおなじになるようにコンパイルオプションなど調整するか
DeleteUTF8Textなどの関数をDLL側に追加して
それを使って開放するようにするといいです。


ただ、Tesseract OCRって、解析中に普通に落ちたり、
解析の正答率が低い気がするので、他の手段を使ったほうがいいかもしれません。

2015年10月21日水曜日

Android wearのウォッチフェイス集「Real Material Watch Faces」をリリースしました


無事リリースされました。
Real Material Watch Faces
https://play.google.com/store/apps/details?id=jp.dofilabs.realmaterialwatchfaces

12種類のセットのウォッチフェイス集です。




イチオシの盤面は、リアルな目玉がキョロキョロとするハロウィンにピッタリのEye Watchです。
スホマから設定で時間表示を消して、目玉だけにすることも可能です。

その他も全12種類、全てアニメーションする盤面で、綺麗なものや面白い効果のものを色々と揃えてます。

スマホからアニメーション速度や、自動盤面切り替え機能、曜日の表示、
ウォッチのバッテリ残量表示などの設定も可能です。