さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

IchiPixelでプレゼンしたこと

 というわけで、さる3月24日、IchiPixelというゲーム開発者飲み会で、開発中ゲームのプレゼンをさせてもらった。

 飲み会の場で他人と会話して情報交換して……みたいなコミュが苦手なフレンズは、もはや、マイクを手に入れてアナウンスするしか道は無いのである。やれやれだぜ。

 プレゼンの内容は↓。

 docs.google.com

【Unity】ETC1(Split alpha channel)形式テクスチャをUIに使う

やること

 Android環境において、アルファつきテクスチャ画像をETC1(Split alpha channel)形式でインポートし、UIで使う。その手順について。

手順

テクスチャインポート設定

  • SpritePacker有効時のみ有効なので、PackingTagを設定。
  • FormatをRGB Compressed ETC 4bitにする。
  • Compress using ETC1(split alpha channel)にチェック。

f:id:enuenupi:20170321144430p:plain

 ちなみに、ビルドするとこんな感じでログが出る。

f:id:enuenupi:20170321184246p:plain

シェーダ設定

 デフォルトのUIシェーダはアルファ分離ETC1に対応していない。

 そこで、ProjectSettings -> Graphic -> Always Included Shader listにUI/DefaultETC1を登録しておくことで、適切なシェーダへの切り替えを行ってくれるようになる。

f:id:enuenupi:20170321180320p:plain

確認

 じっきでおこなわないとひどいめにあう。

参考

docs.unity3d.com

docs.unity3d.com

【Unity】ダメージっぽい数字表示

 Unity5.5.1p4

コード

 BaseMeshEffectを継承して作る。Shadowコンポーネント等と一緒にアタッチすると変になったりするけど、処理順の問題なので、コンポーネントの順番を入れ替えれば良い。

gist.github.com

gist.github.com

【Unity】Z書き込みアリのSpriteシェーダ

 UnityのSpriteシェーダはデフォルトだとZバッファに書き込みを行わない。

 そこでデフォルトシェーダを改造し、Zバッファに書き込むシェーダを作成する。その手順。

 Unityは5.5.1p3。

手順

1.デフォルトのシェーダを取得

 Unityのサイトからビルトインシェーダをダウンロードする。

 zipを解凍し、DefaultShaderExtra/Sprites-Default.shaderファイルがそれ。Unityにインポートする。

 ↓が今回のDL元。

unity3d.com

2.名前変更

 一行目、Sprites/Defaultになってるのを分かりやすい名前に修正する。

 今回はTSKT/Sprites/ZWriteにした。

3. Queue変更

 "Queue"="AlphaTest"

 説明は↓のあたり。Rendering Orderの項目。

docs.unity3d.com

4. RenderType変更

"RenderType"="TransparentCutout"

docs.unity3d.com

5. ZWrite変更

ZWrite OffとなっているのをZWrite Onにする。

6. アルファテスト追加

 fragメソッド内に↓を追加する。0.5は適当な数値に調整すれば良い。

clip(c.a - 0.5);

 これはいわゆるアルファテストで、αが一定以下のピクセルを破棄する。これがあるために、今回つくったシェーダでは半透明な領域やフチ部分は汚くなってしまう。

 まあ、やらないと透明な領域までZバッファが書き込まれてしまい、欠けてほしくない部分が欠けたりしてまずいのだ。半透明は諦めよう。

 ちなみにこんな感じで汚くなる。絶望的。

default

f:id:enuenupi:20170210181048p:plain

zWriteOn

f:id:enuenupi:20170210181123p:plain

できたコード

gist.github.com

【Unity】水面エフェクト2D

 やることはいたってシンプル。画面下半分に上半分を反転コピーするだけ。それっぽく見せるために色変えたりサインカーブつけたりすれば効果的だけど、その辺はデザインに依る。

コード

gist.github.com

【Unity】色分解しながら画面ゆらすエフェクト

コード

gist.github.com

 色収差とでも言いたいところだけど、別にレンズ特性の再現とかやってるわけではなくてマジにRGBごとにゆらしてるだけなので。