テラシュールブログ

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

最適化・デバッグ

【Unity】StandardShaderをAssetbundleに格納した際にNormalやAlphaが動作しない問題の回避方法

AssetBundleにシェーダーを格納し常にロードしておく事で、シェーダーのコンパイルやGPU転送コスト、それにシェーダーのメモリ消費を回避出来ます。特にシェーダーのコンパイル・GPU転送等は地味に馬鹿にならないコストを要求するので、出来れば積極的に排除…

【Unity】CPUプロファイラでパフォーマンスを改善する 後編

CPUプロファイラに関する内容の後編です。 パフォーマンスの問題を解決する GCを減らす GCの発生要因を減らす コルーチンとGC GCの負荷を減らす オーバーヘッドとは何ぞや 実機で動作するアプリのパフォーマンス検証 出力したアプリを計測するメリット 実機…

【Unity】複数のAssetBundleから参照されるアセットを見つけ出す

AssetBundleにて「AssetBundle一つにつきPrefabを一つ格納」といった感じで設計している場合、一見Prefabのアセットのみが格納されているように見えますが、実際は「Prefabが参照しているすべてのアセット」が含まれます。 といった内容が以前書いた【Unity…

【Unity】マテリアルやSetPassを増やさずテクスチャのUVを変える

色やテクスチャを変えるとマテリアルが増える UnityはGetComponent<Renderer>().material.color = 色;とかでマテリアルの色を変更する事が出来ますが、これを行うとマテリアルが追加で一つ作られます。 異なるマテリアルは一括で描画出来ないので、内容物が同じであっ</renderer>…

【Unity】パフォーマンスを得るための16のヒント

プロファイラに関する記事を書く過程で、パフォーマンスに関して良い感じの記述があったので、メモ。

【Unity】CPUプロファイラでパフォーマンスを改善する 前編

ゲームを作っているうちに、何か重い的な事もあるかもしれません。そんな時、プロファイラを使用して重い部分を発見・改善する必要があります。 Unityの標準プロファイラはXcodeのInstrumentsよりも精度で劣りますが、サクっと確認する上では結構使い勝手の…

【Unity】AssetBundleを利用してアプリサイズを削減するアプローチ

Unity 2017はコチラを使いましょう。 tsubakit1.hateblo.jp AssetBundleの依存関係等があり、必ずアセットを含める必要がある場合はアセットをローカルに保持するのが有益かもしれません。 ------------------------------------------------------------- A…

【Unity】タップした位置にエフェクトを表示する

スマホでよくあるような、タップした位置にエフェクトを表示させる表現の作り方について、少しメモします。 タップした位置(カメラから見た3D座標)を取得 タップエフェクトを表示 エフェクトだけを表示するカメラの設定 おまけ:最前面にパーティクルを表…

【Unity】ノベルゲームの立ち絵表現で、キャラクターの表情だけ切り替えて、メモリとロード時間を節約する

ついにユニティちゃんの立ち絵素材が公開されましたよ。超可愛いユニティちゃんとユーコちゃん*1、あとミサキちゃんの立ち絵が使えるようになった!ヤッタネ☆ さらに嬉しい事に解像度は1620×2048と非常に高解像度で、キャラクター全体像をのイメージが使用さ…

【Unity】ログが表示するスタックトレースの表示範囲を制限する

ログを表示する上で、スタックトレースはバグを追跡する重要な情報です。ですが、場合によっては別に表示しなくても良いケースもあります。 Unity 5.4からその辺りが調整出来るようになったみたいです。 スタックトレースの表示範囲を調整する Noneの場合 Sc…

【Unity】ファイルサイズとメモリ消費を無意味に増やさない為の、AssetBundleと依存関係についてのメモ

今回はAssetBundleとAssetBundleの依存関係についてです。これについては、AssetBundleを使うなら最低限知っといた方が良いかもしれません。 AssetBundleとアセットの依存関係 複数のAssetBundleから特定のアセットを参照する場合 リソースは別のAssetBundle…

【Unity】ゲーム内で何がどの程度メモリを消費しているのか確認する MemoryProfiler

ゲーム内で使用してるメモリを把握するのに少しだけ便利なMemory Profilerについてです。 ゲーム内で使用しているメモリ 導入方法 使い方 ゲーム上のメモリを取得する アセットの追跡 追記(テクスチャの中身を知りたい場合) 関連 ゲーム内で使用しているメ…

【Unity】5.3以降AssetBundleの各種圧縮形式のパフォーマンス比較

Unity5.3になりAssetBundleが変わりました。で、AssetBundleのパフォーマンスについても大分変化したので、そこについて検証してみようと思います。 AssetBundleの新しい設定LZ4 検証方法について 結果。無圧縮でかい、LZMA遅い、LZ4はその間 キャッシュとLZ…

【Unity】1GB近かったPC向けゲームのアプリサイズを18MBぐらいまで縮めた話

グローバルゲームジャム2016で、NPCに紛れたプレイヤーを見つけ出すゲーム「Creep IN Heresy(邪教に忍び込め!)」を作った話 -で少し書いた、アプリサイズを少し小さくした話です。 これはTipsと言うよりは、単純に作り方が間違ってたので凄いサイズになり…

【Unity】CullingGroupについて

CullingGroupとは オブジェクトが実際に見えている場合のみ処理を行う Renderer.isVisible オブジェクトとの相対距離で処理を切り替える サンプル CullingGroupとは CullingGroupは、見えないオブジェクトや遠いキャラクターのギミックに対して制御を行うた…

【Unity】リアルタイムGIの影響範囲を表現するClusteringとLit Clusteringについて

Unity 5.3よりシーンビューの項目に新しく「Clustering」と「Lit Clustering」が追加されました。 「Clustering」と「Lit Clustering」はPrecumputed Realtime GIの解像度や影響範囲を表現するために使用する項目です。UnityのリアルタイムGI(Global illumi…

【Unity】LOD(Level of Detail-距離に応じたハイポリ/ローポリの切替)をキャラクターで使用する方法

Level of Detailをキャラクター・・・と言うかアニメーションを持つキャラクターに対して使用する方法についてです。 LOD(Level of Detail) キャラクターとLOD 一つのAnimatorでLOD やり方 関連 LOD(Level of Detail) Level of Detailは距離に応じて描画…

【Unity】パフォーマンスが良いらしいUIのマスク、RectMask2Dについて

Maskと異なり四角形でしか切り抜けませんが、Maskよりかなり高速に動作するRectMask2Dが何時ごろか追加されました。 このRectMask2DはRectTransformの範囲で切り抜きを行うためMaskで必要だった「画像」を必要としませんが、その代わり高速で動作するみたい…

【Unity】誤ってUnityエディタで無限ループ起こしても、Unityを強制終了させることなく復帰する「Panic Button」

先日のUnity Tips(火曜日にUnityのTipsを#unitytipsタグと一緒にTwitterで紹介する)を眺めていた所、なんか凄いアセットが目につきました。 #unitytips How to stop a pesky infinite loop in 1s with Panic Button. Learn more: http://t.co/ezdJ9nqn4c #…

【Unity】モバイル向けのライトマップTipsと、ライトマップを動的に更新するHack

Unity 5はリアルタイムな光源を基本としている節がありますが、モバイル上では依然としてパフォーマンスを稼ぐためライトマップをベイクする方が良いです。 今回はそのライトマップの色々なアプローチについて紹介します。 ライトを焼く ライトマップを焼く…

【Unity】コンソールログを検索する方法

Unityで開発を行っていると、膨大なコンソールログから1行を探して確認することが必要なケースが発生することがあります。そんな時は、Editotr.Logを確認します。 例えば自分の場合「ゲームが使用していないファイルをプロジェクト外に退避する」エディタ拡…

【Unity】おなじプロジェクトを複数のエディタで同時に操作する(Windows版)

ゲームを作成するシーンにおいてエディタを複数起動し同一プロジェクトを操作したくなるシーンがあります。 例えば、オンラインマルチプレイなゲームの開発です。複数のクライアントが必要となるこのケースですが、動作の確認に毎回WebPlayerやStandalone向…

【Unity】Animatorのプロパティやステートへのアクセスを容易にするエディタ拡張

ふと思いついて、Animatorのステートやパラメータに定数でアクセスする為のコードを自動生成するエディター拡張を作成しました。 導入方法は ファイルをインポートするだけです。 https://github.com/tsubaki/Unity-AnimatorAccessHelper/blob/master/Animat…

object.ReferenceEquals(someObject, null) の方が someObject == null より早い…が、盲目的に使うのは危険

先日#UnityTipsにて、中々に面白いTipsが紹介されました。 #UnityTips object.ReferenceEquals(someObject, null) is faster than someObject == null. — Mike Geig (@mikegeig) 2015, 5月 26 #UnityTipsとは 火曜日の大体夕方から夜にかけて、#UnityTipsの…

UnityでGear VR用アプリを作るなら知っておきたいデバッグ方法

当初Gear VRでデバッグする方法が分からず地獄を見ました。なので、デバッグする方法について紹介します。 Gear VRに刺さずにアプリを起動する Wifi経由でADBを取得する デバッグ用のUIを表示する スクリプトデバッグする 再生中のゲーム画面をPCで確認する …

Unityに配置したモデルをアニメーション向けに最適化する

Unityでアニメーションを行うモデルを配置した際、パーツ次第で結構深い階層を持つことになります。実はUnityは深い階層を持つのは高いコストになるらしく、これを避けるのが望ましくあります。 下の図はハロゥインユニティちゃんのみのシーンですが、展開す…

UnityのOcclusion Cullingの機能を使って3D空間を効率的に描画する

Occlusion Culling OccluderとOccludee Smallest OccluderとSmallest Hole Occlusion AreaとOcclusion Portal Occlusion Cullingがあんまり効かないケース 参考 Occlusion Culling Occlusion Cullingとはオブジェクトが遮蔽物に隠れていた場合にオブジェクト…

Unityの2DやuGUIのパフォーマンス最適化についての7つのTips

最適化というか、改善する話です。 モバイル向けに作った時に妙に遅かった場合、この辺りの要因が絡んでいるケースが多い印象です。この辺りは作る際に確認しながら作ると、後々痛みが少なくて良いかなと思います。 目次 目次 プロファイラで確認する エディ…

UnityのuGUIとImageとSpriteとスライスについて

uGUIのスライスは覚えておくと便利な機能です。 今回はコレを作ろうと思いましたが、スライス部分が予想以上に色々と出来たので分割します。コレの作り方は次回。 目次 目次 スライスする方法 大きさを調整する 真ん中を塗りつぶさないでフィルレートを節約…

UnityのuGUIで無限にスクロール出来るスクロールビューを作る

使い方 アイテムの内容調整 制限付きスクロールビューのやり方 以前UnityのuGUIでスクロールビューを作る方法を紹介しました。 UnityのuGUIでスクロールビューを作る - テラシュールブログ UnityのuGUIでスクロールビューを作る - テラシュールブログ 今度は…