さけのさかなのブログ

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

Unity

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

やること Android環境において、アルファつきテクスチャ画像をETC1(Split alpha channel)形式でインポートし、UIで使う。その手順について。 手順 テクスチャインポート設定 SpritePacker有効時のみ有効なので、PackingTagを設定。 FormatをRGB Compressed…

【Unity】パーリンノイズで陽炎っぽいエフェクト

パーリンノイズによる陽炎めいたやつ pic.twitter.com/uUDwLtQ03E— enu (@_enu) 2017年3月1日 コード for Unity5.5.2f1 gist.github.com 必要ファイル パーリンノイズのコードは↓から。 github.com

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

Unity5.5.1p4 数字 pic.twitter.com/20R8Ictytm— enu (@_enu) 2017年2月18日 コード BaseMeshEffectを継承して作る。Shadowコンポーネント等と一緒にアタッチすると変になったりするけど、処理順の問題なので、コンポーネントの順番を入れ替えれば良い。 gis…

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

UnityのSpriteシェーダはデフォルトだとZバッファに書き込みを行わない。 そこでデフォルトシェーダを改造し、Zバッファに書き込むシェーダを作成する。その手順。 Unityは5.5.1p3。 手順 1.デフォルトのシェーダを取得 Unityのサイトからビルトインシェーダ…

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

やることはいたってシンプル。画面下半分に上半分を反転コピーするだけ。それっぽく見せるために色変えたりサインカーブつけたりすれば効果的だけど、その辺はデザインに依る。 水面エフェクト© UTJ/UCL pic.twitter.com/PXgovJxh90— enu (@_enu) 2017年1月2…

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

色分解しながら画面ゆらし pic.twitter.com/gtrFTXjZGk— enu (@_enu) 2017年1月16日 コード gist.github.com 色収差とでも言いたいところだけど、別にレンズ特性の再現とかやってるわけではなくてマジにRGBごとにゆらしてるだけなので。

【Unity】CloudBuildでうまくいかない場合対応

概要 以下の条件において、UnityCloudBuildでビルドしたものが上手く動かない場合の対応方法。 条件 windows環境で開発していて Resourcesフォルダ下のファイル名に濁点/半濁点がある 上記の条件をみたすとき、Resources.Load, Resources.LoadAsyncに失敗し…

【Unity】複数個所から安全にTime.scaleを操作する

あかんパターン たとえば一時停止処理などでTime.scaleに0fを入れて時間を止め、なんやかんやした後に1fを入れて戻す処理を書くとする。 この時、なんやかんやしてる内部でTime.scaleに1fを入れてしまうと、勝手に時間が動き出してしまいマズイ。 やること …

【Unity】Resources.LoadAsyncするけどパス指定したくない

やること ロード処理においてResources.LoadAsyncを使いたい。が、いちいちパス指定するのが嫌、という場合のための仕組みをつくる。 コード gist.github.com 使い方 アセットのクラスごとに継承したクラスを作る。 using UnityEngine; using System.Collect…

【Unity】ResourceLoaderクラス

やること Resources.LoadAsync<T>を処理する便利クラスをつくる。 これによって、たとえば、Resources.LoadAsync<T>はせっかくジェネリックメソッドなのに、assetを取り出すときにはキャストが必要、とかの煩雑さを解決する。 コード gist.github.com 使い方 newし</t></t>…

【Unity】Spriteで高さフォグっぽいやつ

やること Spriteで高さフォグっぽいものを実装する。ワールド座標で低いところにあるとフォグがかかるやつ。 Lightingビューのfog設定を反映させられれば完璧だったんだけど、よくわからんかったのでmaterialで色などを設定するような作りにした。 コード Un…

【Unity】立ち絵の透明部分をトリミングする

やること キャラクターの立ち絵画像で、左右に無駄な透明部分が生まれる場合がある。無駄なので、これを自動で処理するようなエディタ拡張スクリプトを作成する。 サンプル UnityChanの立ち絵でやってみると、テクスチャの横幅が2524pxから1988pxになる。 な…

【Unity】ARGB文字列をパースする

かゆいところ Unity標準機能のColorUtility.TryParseHtmlStringを使うと、#RRGGBBAAで指定された文字列をColorにパースすることができる。 けど、世の中にはAARRGGBBもあるわけでして。 コード Unity5.4.0p1 static public class ColorUtil { static public …

【Unity】 WebGL版の落とし穴

先日Tactics.YokoのWebGL版を公開したわけですが。その時ひっかかった点。 ThreadNinjaは動かない マルチスレッド処理を行うのにThreadNinjaというアセットを使ってるんですが、これが例外を吐く。 なので↓のようにマルチスレッド処理をあきらめる。 public …

【Unity】Perspectiveカメラで2D画面の多重スクロール

横スクロール2Dゲームのステージで、背景がスクロールしたときちょっとずつズレるみたいなのを実装する。 素直にスクロール値を計算して毎フレーム位置を動かして……、とかやっても全く問題ないんだけど、まあ、とくに支障がないならカメラの機能だけでやって…

【Unity】 SystemInfoをコンソールに出力するエディタ拡張

SystemInfoのプロパティを全取得して一覧する。 gist.github.com

【Unity】文字がふるえるエフェクト

海外のゲームで見る(きがする)文字がふるえるエフェクト pic.twitter.com/eKUTVS1ux3— enu (@_enu) July 5, 2016 こんな感じ。 一文字一文字をGameObjectにして座標をいじって……なんてやってられないので、いくつか問題があるもののBaseMeshEffectを継承し…

【Unity】 カスタムコルーチンでこのコールバックからの卒業

Unity5.3からカスタムコルーチンを使えるぞ!これで何ができるの?いろんな条件で処理を止められるぞ ……という他に、コルーチンの戻り値を受け取るのにコールバックを使ってる部分をマシにできたりする。 普通のコルーチンメソッドで書くとこんな感じなのを …

Unity Matrix4x4で連立方程式を解く

// 四点を通る三次関数を得る static public void CalculateCubicFunctionBy4Points( float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) { var matrix = new Matrix4x4(); matrix[0, 0] = x1 * x1 * x1; matrix[0, 1] = x1 …

徐々に消えるライト

やること 爆発エフェクトなんかを作るとき、オブジェクトにライトを持たせる場合がある。 このとき、普通にエフェクトオブジェクトにライトコンポーネントを持たせただけだと、オブジェクトがDestroyされた瞬間にライトもパッと消えてしまう。余韻をもってじ…

【Unity】MultiModeなSpriteの参照を取得し直す

問題 MultiModeなSpriteの参照をGameObjectだかScriptableObjectが持っているとき。 画像の変更か何かがあってSliceし直すと、Spriteへの参照がMissingになる。これをなんとかする。 理屈 Spriteが生成し直されるのはどうしようもない(多分)ので、Texture…

【Unity】範囲指定可能なブラーエフェクト

そもそも、2Dベースなら真面目に被写界深度エフェクトをやることもないよね! というわけで、範囲指定ができるブラーエフェクトを作った。 理屈 ImageEffectのDepthOfFieldエフェクトは深度バッファを参照してブラー範囲を決めることでピンボケを表現してい…

【Unity】Orthographicカメラで被写界深度エフェクトを使う

Sprite+Orthographicカメラという極北で被写界深度エフェクトテスト pic.twitter.com/4VAVI4N5sj— enu (@_enu) 2016, 1月 30 やること ImageEffectに含まれるDepthOfFieldエフェクト。 これはperspectiveカメラで使うことを前提にしており、orthographicカメ…

非同期シーン追加ロード、からの復帰

やること RPGのフィールドで敵に遭遇 -> ブワッ -> バトル -> フィールドに戻る、みたいな流れを作るためのシーンロード処理。 具体的にやるべきなのは ブワッとなってる間にバトルシーンを読み込む(非同期ロード) バトルが終わったらフィールドに処理を戻…

Preferredサイズに上限を設定する

やること たとえば文章を表示するウィンドウを作った時。 文章が短いうちは文章に合わせてウィンドウが大きくなる。 ある一定サイズ以上にはウィンドウは大きくならず、文章は改行されて表示される みたいな機能をつくる。 イッテイサイズイジョウデカイギョ…

ビルボード

ふつうのビルボード 3Dカメラに対して常にSpriteが正面を向くようにする gist.github.com 鉛直なやつ Spriteが鉛直に立っている状態を保ちつつ、カメラの方を向くようにする [DisallowMultipleComponent] [ExecuteInEditMode] [RequireComponent(typeof(Rend…

ScrollRect.OverScrollを取得する

ElasticやUnrestrictedなScrollRectで、はみ出したスクロール量を取得する処理。 なんで前回normalizedPositionでガタガタ言ってたかというと、これがやりたかったからなんだよね。結局使わなかったが。 Vector2 GetOverScrollRanges(ScrollRect scrollRect)…

ScrollRectの罠!

UnityUIのScrollRect.normalizedPositionの変な挙動について。確認したUnityのバージョンは5.3。 なお、中身は return new Vector2(horizontalNormalizedPosition, verticalNormalizedPosition); なだけなので、厳密にはhorizontalNormnalizedPosition, vert…

神か悪魔か日本語コーディング

C#だとクラス名やらメソッド名やらに日本語が使えるぞ!なーんつってクソコードが出来上がる経験は、誰しもあるはず(個人差有)。 というわけで頑張って英語の辞書とにらめっこしながらコーディングするわけですが、 enumぐらいは日本語でも良くね? [Syste…

GetCharacterInfoが動かない?

表示されてる文字の情報を取ろうとして失敗する現象に遭遇した。 CharacterInfo characeterInfo if (Text.font.GetCharacterInfo(c, out characterInfo)) { // 通らない } 原因はどうやら、 GetCharacterInfoの第三引数を省略するとフォントのデフォルトサイ…