テラシュールブログ

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

最適化・デバッグ

【Unity】「最適化をする前に覚えておきたい技術」

Unity開発者なら一度は目を通しておくと幸せになる資料です。 「最適化=実際に手を動かす」の前に、何をすれば効果的なのか を探す方法について紹介されています。 要するに、Unityで良くある問題とプロファイラの使い方についてです。 【Unity道場スペシャ…

【Unity】シェーダーで3Dモデルのアニメーションを行う Animation Texture Baker

今回はシェーダーで3Dモデルのアニメーションを行います。 シェーダーで3Dモデルのアニメーションを行う とりあえずやってみる Animation Texture Bakerの導入 テクスチャでアニメーションするモデルの導入 アニメーションの変換 GPU Instancingに対応してみ…

【Unity】Polygon Collier 2Dの頂点を調整する

今回は2DのPolygon Collier 2Dの頂点を調整する方法についてです。左の絵が右のようにスッキリします。 Polygon Collier 2Dの頂点は解像度で決まる 判定を調整したくなるケース コライダーを調整する Polygon Collier 2DのEdit Collier Edit Physics Shape …

【Unity】PrefabにScriptableObjectを格納する

今回はPrefabにScriptableObjectを格納する話です。 ScriptableObjectを使うと何が良いの? SriptableObjectをPrefabに格納してしまおう サンプル Tips ScriptableObjectを使うと何が良いの? Prefabをインスタンス化する場合、コンポーネントの複製が行われ…

【Unity】低解像度に設定したRenderTextureを使いつつ、クリックした位置にキャラクターを動かす

今回はRenderTexturerを使用しつつ、クリックした位置にRayを飛ばし移動させるアプローチについて色々と見てみます。 低解像度なRenderTextureでゲームを描画する Camera.main.ScreenPointToRayがおかしくなる Input.MousePositionの位置を補正してやる 関連…

【Unity】パーティクルのテクスチャアニメーションをSpriteで行う

今回はUnity 2017.1で搭載された「Particle Animation」のスプライト版についてです。 Spriteのパーティクルアニメーション 細かいパーティクルの順番制御が可能に オーバードローの抑制 設定方法 関連 Spriteのパーティクルアニメーション Unity 2017.1より…

【Unity】ScriptableObjectを使用した、コンポーネント・シーン間でのデータ共有について

今回はScriptableObjectを使用したComponentやScene間でのデータ共有についてです。なお、この記事は30回近く書き直した*1という曰く付きの記事で、場合によっては消えるかもしれません。 ScriptableObject ScriptableObjectはアセットでありインスタンスで…

【Unity】ゲームのビルド直前に "ファイルの退避" や "シーンの最適化" 等の処理を挟む

今回はUnityでゲームをビルドする前にプロジェクトやシーンに何らかの処理を行い、、ビルド完了後に戻す方法についての紹介です。 Unity 5.6以降で動作します。 作る際に便利なものとパフォーマンスに良いもの ビルド前とビルド後に処理を行う(全体) ビル…

【Unity】ゲームに最初から含めるアセット群を圧縮するオプション

Unity 5.6から、ビルドしたゲームに含めるアセット群を圧縮するオプションが追加されました。 この圧縮をONにすることで「アプリ起動時間の短縮」や「インストール後にサイズが膨れ上がるのを防ぐ(iOS/Standalone)」効果が期待出来ます。 ビルドしたゲーム…

【Unity】uGUIのImageとSprite Rendererの使い分け

今回はuGUIのImageとSprite Rendererの使い分けについてメモします。 ImageとSprite Renderer Sprite Rendererの振る舞い uGUI Imageの振る舞い 最適化に関するアプローチの違い SetPassの削減に関する振る舞いの比較 フィルレート・オーバードロー削減に関…

【Unity】アプリに含めるアセットを抑えて、アプリサイズを小さくする

今回は、Unityプロジェクトからアプリケーションをビルドした際、Unityプロジェクトに含まれるアセットについてです。 Assets以下のアセットは全て含まれる訳ではない Resourcesフォルダ以下のアセット Resourcesは使わないサブアセットも全て含める Sprite…

【Unity】Rigidbody2Dがスリープになったかどうか確認する

物理演算はスリープしてCPUを節約する 物理演算は複雑な当たり判定と物理的な動作のシミュレーション(再現)を行います。ただゲームのCPUにも限度という物があるため、物理演算はたいてい接触しない・動かないオブジェクトはスリープ状態へ移行する機能を持…

【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で必要だった「画像」を必要としませんが、その代わり高速で動作するみたい…