(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Unityで作ったアプリのサイズを減らす20の方法【Unity】【容量削減】

この記事はUnity Advent Calendar 2018の5日目の記事です。


この記事でのバージョン
Unity 2018.2.2f1


はじめに

Unityは画像や音源をそのまま使っているわけでないので、

PC上のアセット(ファイル)のサイズとアプリに含まれるアセットのサイズが異なっていたり

プロジェクトに入ってるアセット= アプリに含まれる(ビルドされる)アセットではないので、

使っていないアセットがアプリに含まれてしまったりと、ちょっと特殊な感じで、

最初のうちは完成したアプリのサイズを減らそうと思ってもなかなか上手くいきません。


という事で今回は「Unityで作ったアプリのサイズを減らす方法」を知っているかぎりまとめてみました!


なお、Unityのバージョンやデータの内容、プラットフォーム違い等で結果は変わるかもしれないので、

実際に確かめながら削減する事をオススメします。


また、本記事に出てくるアセットは以下のものを使っています。







目次

  • はじめに
  • 目次
  • ビルド時の圧縮設定
  • 不要なアセットが含まれないようにする
    • Resourcesに入っているアセット
    • Prefabで使われているアセット
    • Sceneに配置されているアセット
    • StreamingAssetsに入っているアセット
  • アセットのサイズを減らす
    • 画像
      • 最大サイズ
      • 圧縮形式
      • Mip Map
      • 画像をまとめる
      • ベイクの質を下げる
    • 音源
      • 圧縮形式
    • 3Dモデル
      • アニメーションの圧縮形式
      • メッシュの圧縮形式
      • メッシュのポリゴン削減
    • フォント
      • 必要な文字だけ取り出す
      • 画像にする
  • 設計の見直し
    • AssetBundleを使う
    • ScriptableObjectをJSONにする
    • デフォルトでビルドされないDLLの使用を避ける
    • Net 2.0 サブセットを使う
    • 不要なパッケージを削除する
    • Unityのバージョンを変える
    • Tiny Unityを使う
  • おわりに
  • 参考


ビルド時の圧縮設定

続きを読む

パーリンノイズを使ってアニメーションにランダムなゆらぎを与える【Unity】【パーリンノイズ】

この記事はUnity #2 Advent Calendar 2018の3日目の記事です。


この記事でのバージョン
Unity 2018.2.17f1


はじめに

【Unity道場 京都スペシャル2 2017】乱数完全マスターという講演の動画を見ていたら、

パーリンノイズを使って全ての関節にゆらぎを与え、ランダムかつ自然な待機アニメを作る

という面白そうな事をやっていました。


f:id:kan_kikuchi:20181201180531g:plain
【Unity道場 京都スペシャル2 2017】乱数完全マスター - YouTube


これを使えば「違うキャラなのに全く同じアニメをする」「全く同じアニメをリピートし続ける」

というゲームではよくある不自然さをなくせます。


今回はこれを応用して、アニメにゆらぎを追加し

「基本的には同じだけど、ちょっと違うし、ランダムなアニメ」を作ってみました!


イメージとしては以下のような感じ。


f:id:kan_kikuchi:20181201193621g:plain


なお、本記事に出てくる3Dモデルは以下のものを使っています。





パーリンノイズとは

続きを読む

アセンブリごとのコンパイル時間を計測したり、一定時間を越えたら警告を出したり【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2018.2.17f1


はじめに

Unityではコードを変更するたびに自動でコンパイルがされます。

(コンパイルしている時は右下にグルグルが出ている)


f:id:kan_kikuchi:20181127050810j:plain


当然、コンパイル時間はコードが多いほど増していくので、

プロジェクトが大きくなっていくと無視できない時間になります。


そんな時はStandard Assetsという特殊なディレクトリやAssembly Definition Filesを使って、

アセンブリ(コンパイルする範囲)を分けて、コンパイル時間を短縮するのが常套手段です。




しかし、具体的なコンパイル時間が分かるわけではないので、

どのタイミングでコンパイル時間の短縮を図ればいいのかというのは難しい問題です。


ということで今回は、アセンブリごとのコンパイル時間を計測したり、

一定時間を越えたら警告を出したりという事をしようという記事です。


イメージとしては以下のような感じ


f:id:kan_kikuchi:20181127050927j:plain


AssemblyCompileTimeWindow

続きを読む

メニューを追加するための属性「MenuItem」は意外と多機能【Unity】【エディタ拡張】【属性】


この記事でのバージョン
Unity 2018.2.14f1


はじめに

Unityのエディタ拡張にはMenuItemというメニューを追加したい時に使える属性があります。

このMenuItemは簡単かつ便利なので、知っていおいた方が良いですし、

エディタ拡張の入門としてもオススメです。

ただ、意外と多機能なのでMenuItem自体は使っていても、知らない使い方があるかもしれません。

[MenuItem("自作メニュー/MenuItemは/意外と/多機能")]
private static void NoMeaning() { }

[MenuItem("自作メニュー/Shortcut #&g+")]
private static void Shortcut() { }

[MenuItem("自作メニュー/CheckMark")]
private static void CheckMark() {
  string menuPath = "自作メニュー/CheckMark";
  bool isChecked = Menu.GetChecked(menuPath);
  Menu.SetChecked(menuPath, !isChecked);
}

[MenuItem("自作メニュー/Validate")]
private static void Validate() { }

[MenuItem("自作メニュー/Validate", validate = true)]
private static bool ValidateValidation() {
  return Application.isPlaying;
}

[MenuItem("自作メニュー/Priority1", priority = 1)]
private static void Priority1() { }

[MenuItem("自作メニュー/Priority100", priority = 100)]
private static void Priority100() { }

f:id:kan_kikuchi:20181125124142j:plain


という事で今回はこのMenuItemについてまとめてみました!

なお、他にもこんなことが出来るみたいなのがあれば、ご一報頂けると幸いです。


目次

  • はじめに
  • 目次
  • 基本的な使い方
  • ショートカットキー(ホットキー)の設定
  • メニューの追加場所を変える
    • ProjectビューのCreate
    • Projectビュー上で右クリックした所
    • コンポーネントの歯車
  • 無効にして使えないようにする
  • チェックマークを付ける
  • 並びの優先度を指定、区切り線を追加



基本的な使い方

続きを読む

CompilationPipelineを使ってコンパイルの開始と終了を検知【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2019.1.0a8


はじめに

今回はコンパイルの開始と終了を検知する方法のご紹介です。


ちなみにUnityではプログラムを修正し、コンパイルが開始されると右下にアイコンが表示されます。

なので、このアイコンが表示された時と消えた時を検知しようという感じです。


f:id:kan_kikuchi:20181110104504j:plain


イメージとしては以下のような感じ


f:id:kan_kikuchi:20181110112343g:plain


compilationStartedとcompilationFinished

続きを読む

人気アセットをまとめたバンドルが今だけ55%オフ!【Unity】【アセット】

はじめに

Unity Asset Storeでバンドル(アセットをまとめたもの)のセールが始まったので、

今回はこれの紹介記事です!


セール対象のバンドルは以下の4つで、どれも人気アセットばかりです。

(セールは2018/11/25(日)まで)


なお、各特集ページのGet the bundleのボタンから購入する事が出来ます。


f:id:kan_kikuchi:20181119122943j:plain


一応購入時にちゃんと割引されているかを確認しましょう。


f:id:kan_kikuchi:20181119122953j:plain


内容としては以上なんですが、これだけだとちょっと寂しいので、

各バンドルとそれに含まれるアセットについて軽く紹介します。


ちなみにアセット単体のセールも同時に行われているようです。


f:id:kan_kikuchi:20181120073222j:plain
セール中のアセット


Essentials for Professionals

続きを読む

描画に関する処理をC#で書けるSRP(Scriptable Render Pipeline)とは【Unity】【SRP】


この記事でのバージョン
Unity 2018.2.14f1


はじめに

Unity関連でSRPというワードをちょこちょこ目にするようになったので、

どんなモノか軽く調べてみた系の記事です!


先に箇条書きでざっくりとまとめてみると以下のような感じ。

  • SRPとは描画に関する処理をC#で書けるようにしたもの
  • SRPは1から全部自作する事も可能だが、テンプレも用意されている
  • テンプレはローエンド(モバイルとか)用のLWRPハイエンド(PS4以上)用のHDRPの2種類
  • LWRPはSRPを使わない状態より軽いが、一部機能が使えない。
  • HDRPは高機能かつ高品質なので、負荷もそれなりに高い。
  • SRPを使うと今までのShaderをそのまま使う事は出来ない
  • SRPで使える標準的なShaderは用意されている(LWRP用とHDRP用が別々にある)
  • SRPを使うとSurface Shaderが使えない
  • SRPを使うとCameraのコールバックが効かない(ImageEffect等を実装しなおす必要がある)
  • 上記のような欠点があるので、既存プロジェクトをSRPに移行するのは大変
  • SRPはプレビュー版なので、今後大幅な仕様変更の可能性がある



Scriptable Render Pipelineとは

続きを読む

GameViewの設定をプログラムから作成、また設定するヘルパークラスと色々な端末のサイズに変更できるエディタ拡張【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2018.2.14f1


はじめに

UnityのGameViewは左上からプルダウン比率やサイズを変更や設定を行う事が出来ます。


f:id:kan_kikuchi:20181104175418j:plain


今回はこれをプログラムから、つまりエディタ拡張で操作したい場合の話です。


GameViewSizeHelper

続きを読む

Unityで使える「レイヤードストーリーズ ゼロ」のオープンソース素材【Unity】【ゲーム素材】

この記事でのバージョン
Unity 2018.2.14f1


はじめに


皆さんはレイヤードストーリーズ ゼロという作品をご存知でしょうか。


f:id:kan_kikuchi:20181108095201j:plain


アニメやゲーム、マンガと複数の媒体に展開していた、いわゆるマルチメディアな作品なのですが、

(残念ながら既にサービスは終了済み)

なんと、ゲーム中で実際に使われている3Dモデルやサウンドをオープンソース素材として公開しており、

しかもその素材はUnityでそのまま使えるらしいのです!


という事で、今回はレイヤードストーリーズ ゼロの

オープンソース素材をUnityでちょっと触ってみた感じの記事です!


f:id:kan_kikuchi:20181108093859g:plain
f:id:kan_kikuchi:20181108084929j:plain


使い方

続きを読む

ショートカットキー(ホットキー)の重複を警告してくれたり、検索や変更が出来たりする新機能、Shortcut Manager【Unity】

この記事でのバージョン
Unity 2019.1.0a7


はじめに

Unityには他のアプリケーションと同様にショートカットキー(ホットキー)がいくつもありますし、



自分で実装する事も簡単に出来ます。



しかし、簡単にショートカットが作れるゆえに、(特にエディタ拡張系のアセットを使っていると)

「どんなショートカットがあるか分からない、重複してるかも分からない」という問題があります。


これらの問題を解決すべく、Unityでは新しいショートカットシステムの開発が進んでいましたが、


f:id:kan_kikuchi:20181103090219j:plain
【Unite Tokyo 2018】エディター拡張マニアクス2018 - YouTube


ついにUnity 2019.1から新システム「Shortcut Manager」が使えるようになりました!



今回はこれを使ってみようという感じの記事です。


基本的な使い方

続きを読む