テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】VR向け?のリストビュー List View Framework

f:id:tsubaki_t1:20160916235821j:plain

少し面白いアセットを見かけたのでメモ。

VR向けなList View Framework

List View Frameworkは、リストビューを構築するのに便利なアセットです。

https://www.assetstore.unity3d.com/jp/#!/content/69353


何故VR用かと言えば、オブジェクトをベースとしたリストビューを構築する為です。

下はサンプルの一つの動作イメージ。

 

リストビュー、しかしuGUIでは無い

なお、リストビューと言っておきながらuGUIは一切使用しておらず、全てメッシュを利用したUIになっていました(VR向けと言うのもこの辺り)
多分uGUIでも使えなくはないのでしょうが、まぁサクっと使う分にはモデルで。

下の絵もuGUIに見えるが、実はTextMeshと普通のメッシュ。マスクはDepthMask。

f:id:tsubaki_t1:20160917001101j:plain

要素は使い回すタイプ

パフォーマンスを重視してか、UIの各要素は使い回すように設計されているみたいです。12個程度の要素で50個~数百個の要素を確認する事が出来ます。

なので、要素が増えてもパフォーマンスに負荷を与えないみたいです。

f:id:tsubaki_t1:20160917002515g:plain

…これ先にuGUIに寄越せよ…

tsubakit1.hateblo.jp

使い方はまた今度

使い方については、休みの間にでも確認します。(予定話

labs.unity.com | List View Framework

 

関連

labs.unity.com | Articles

 

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

【Unity】オープンソースなUnityのプロジェクトを探すサービス Unity List

f:id:tsubaki_t1:20160914235358j:plain

面白いサービスについて聞いたので、メモします。

オープンソースなUnityプロジェクトを探すサービス

Unity ListはOpen Sourceなプロジェクトを探すサービスみたいです。

大体7000個(実際には8000個くらい?)のリポジトリが登録されていて、検索キーワードやカテゴリから検索出来るようになっています。

 

unitylist.com

全てのUnity関連リポジトリが問答無用で登録されるのではなく、何らかの方針があるみたいです。
自分のリポジトリからだと、ExcelImporterMaker(ExcelをScriptableObjectに変換するインポーターを作る奴)やSampleUI(無限スクロールビュー等のサンプル)が登録されていました。

カテゴリは18種類

カテゴリは大体18種類みたいです。

  • Games & Tutorials
  • Tools
  • Audio
  • Inputs
  • Frameworks
  • Camera
  • Shaders & Effects
  • Physics
  • Network
  • UI
  • Tweening
  • Importers & Exporters
  • SDK
  • Procedural
  • Extensions VR
  • Analytics
  • Simulators
  • AI

f:id:tsubaki_t1:20160914235752j:plain

 

 

【Unity】スプラッシュスクリーンがPersonal ライセンスでもカスタマイズ可能に

f:id:tsubaki_t1:20160913233202j:plain

Unity 5.5 b3より、スプラッシュスクリーンのカスタム機能が追加されました。

unity3d.com

 

スプラッシュスクリーンのカスタム

www.youtube.com

スプラッシュスクリーンのカスタムは大きく分けて2つのタイプに分けられます。

  • 自分のオリジナルスプラッシュスクリーンにMadeWithUnityを付ける
  • 自分のスプラッシュスクリーンとUnityのスプラッシュスクリーンを順番に表示する

f:id:tsubaki_t1:20160913232930g:plain

f:id:tsubaki_t1:20160913233059g:plain

ロゴの表示順番や背景も設定可能

合わせて背景もカスタマイズ出来るようになったみたいです。

ロゴの表示順番や表示時間の他にも背景のテクスチャを指定する項目があり、ココにテクスチャを設定すると背景が変化しました。

f:id:tsubaki_t1:20160913233609j:plain

f:id:tsubaki_t1:20160914000548g:plain

プレビューボタンで確認

設定したスプラッシュスクリーンはプレビューボタンで確認出来ます。

f:id:tsubaki_t1:20160913235809j:plain

Personalライセンスでもカスタマイズ可能

Personalライセンスでもロゴのカスタマイズは可能です。ただし、Made With Unityを外す項目が変更不可になります。

逆にProfessionalやPlusばこの項目が外れ、スプラッシュスクリーン自体を非表示にしたり、MadeWithUnityのロゴを回避出来るみたいです。

f:id:tsubaki_t1:20160913234135j:plain

Plus / Professional は Unityロゴ の非表示が可能

PlusライセンスやPersonalライセンスの場合、Show Unity Logoのチェックを外す事で、Made With Unityロゴを非表示に設定出来ます。
また従来通り、Show Splash Screenを外してスプラッシュスクリーン自体をOFFにも出来ます。

f:id:tsubaki_t1:20160914000139g:plain

モバイルでもスプラッシュスクリーンは動作

スプラッシュスクリーンの表示ですが、モバイルでも動作します。
ただ、このスプラッシュスクリーン表示は、本来の(AndroidiOSが指定する)スプラッシュスクリーンに追加して、ロゴを表示するといった流れになります。

Androidの場合、何も設定しなければ黒い画面が表示されますが、 iOSでソレをするとリジェクトされる可能性があるので注意です。

 

この変更でPersonalでも(AndroidiOS向けに設定する)スプラッシュスクリーンを設定する事が可能になりましたが、起動時の(Unityが強制する)スプラッシュスクリーンのアニメーションが外せないといった感じです。

f:id:tsubaki_t1:20160913235019j:plain

関連

blogs.unity3d.com

【Unity】Rigidbody2Dの新しい設定「Dynamic」「Kinematic」「Static」と「Simulated」の使い分け

Unity 5.5からRigidbody2Dの表示が新しくなり、新しいパラメータも追加されました。その内容が凄く分かりにくいので、確認がてらメモします。

「Dynamic」「Kinematic」「Static」

f:id:tsubaki_t1:20160911212643j:plain

Body Typeに新しくDynamicやKinemac、Staticが追加されました。

用途は大体こんな感じみたいです。

  • Dynamic
    物理演算で移動するオブジェクト
  • Kinematic
    スクリプトで動かすオブジェクト
  • Static
    原則移動しない、稀に再配置もしくはOn・OFFするオブジェクト
  • Rigidbody2d無し
    動かさない。

Dynamicは今までどおりのRigidbody2dです。

問題はKinematicとStaticで、この辺りで意味がわかりにくくなります。

KinematicとUse Full Kinematic Contacts

Kinematicの設定にUseFullKinematicContactsという設定が追加されました。この設定の有無は、DynamicもしくはUseFullKinematicContactsを設定したコライダーに接触するかどうかの判定みたいです。

f:id:tsubaki_t1:20160911215655j:plain

UseFullKinematicContactsにチェックの付いていないRigidbodyは、Staticもしくは同様にUseFullKinematicContactsにチェックの付いていないRigidbodyとは接触しないみたいです。

これは少し分かりにくいです。

f:id:tsubaki_t1:20160911214852j:plain

 

例えば下のようなステージがあったとします。赤い地面が上下に動き、プレイヤーのロボが入ったら死ぬ…という奴です。当然、左右のブロックにも当たり判定があります。

f:id:tsubaki_t1:20160911214546j:plain

これ、赤い地面が「接触した対象を消す」みたいなコードを書いていると、周囲の床を判定して消してしまいます。

f:id:tsubaki_t1:20160911224318j:plain

この例では、赤い地面にはUseFullKinematicContactsの無いKinematicを設定します。

これで、地面を動かしても周囲の地面と接触する事を避ける事我できます。また、コールバックイベントの発生を抑えられるので、パフォーマンス的に劇的に有利です。

さらにStaticでは無いので、Rigidbody無しでコライダーを動かした時のペナルティも無いです。

f:id:tsubaki_t1:20160911224534j:plain

Staticは動かさない、動けない

Staticは「動かさない事」を前提にしているので、FixedUpdate等によるコストが0になります。ステージ上に大量に配置しても殆どコストが発生しません。(動かさないならば)
この「動かす」はコライダーのON/OFFやActiveの切替も含まれます。

Rigidbody2D無しコライダーとRigidbody2D Staticは「動かしてはいけない」点で同様ですが、Rigidbody2D StaticはSimulatedでコライダーを効率的に無効化出来るみたいです。

Simulatedは物理演算と当たり判定をOFFにする

多分今回の変更で最も大きな要素が、SimulatedのON/OFFです。

f:id:tsubaki_t1:20160911215707j:plain

このSimulated機能は、物理演算の挙動だけでなく、コライダーの判定も有効・無効にする機能です。例えばSimulatedをOFFにすると、下のような挙動を行うみたいです。

  • 物理演算の機能が停止
  • コライダーの判定を行わなくなる
    Physics.OverlapCircleNonAlloc等にも反応しなくなる
  • Join系の接続も外れる(ONにすると戻ってくる)

つまり、念願のRigidbodyのenableみたいなもんです。
なんでsimulatedなんて分かりにくい名前なのか…

オブジェクトプール時に良いカモ

Simulatedは、主にShootingでObjectPoolingするようなケースで有効かなと思います。というのも、

  • Rigidbody2DはOFFにする方法は提供されていなかった
  • GameObjectを非アクティブにするとOFFにできるが、GameObjectを非アクティブにするコストが発生する
    (例えば、物理演算のパラメータやコライダーのシェイプ情報等がGameObjectのアクティブ切替で破棄・再構築される)

なる問題により、オブジェクトのアクティブ切替によるコストがオブジェクトプーリングで使い回す事により得られるコストを圧迫するケースがある為です。*1

これをRendererとRigidbody.simulatedの切替に変更すると、それなりのパフォーマンスが稼げます。
試しにPCでSpriteとColliderとRigidbody2Dのセットを1000個程、アクティブ切替した物とsimulated&Renderer切替したもので比較してみます。

f:id:tsubaki_t1:20160911224001j:plain

 関連

docs.unity3d.com

tsubakit1.hateblo.jp

*1:特にAnimatorとCollider・Rigidbody、CanvasRendererは大きなコストになってたと思います