さけのさかなのブログ

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

Unity

【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の第三引数を省略するとフォントのデフォルトサイ…

Unity5.2.1のUIエフェクト

またIF変わってんじゃねえか! public class Hoge : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh) { if (!IsActive()) { return; } var list = new List<UIVertex>(); vh.GetUIVertexStream(list); ModifyMesh(list); vh.Clear(); vh.AddUIVert</uivertex>…

ヒエラルキーでの位置を比較する

やること 共通の親オブジェクトをもつ複数のオブジェクトがあるとして、ヒエラルキー上でのオブジェクトの上下関係をしらべる。 今回しらべる上下関係というのは、ヒエラルキーウィンドウを展開したときにオブジェクトが並ぶ順番であり、これはUnityUIだと描…

uGUIでグラデーション文字 その2

toriden.hatenablog.com 前にuGUIの文字にグラデーションをつけるコンポーネントを作った。 が、Unityが5.1から5.2になるにあたって、Textの頂点生成処理が変更されており(1文字4頂点だったのが6頂点に変更)、上記のやりかただとパラメータを再設定する必…

uGUIでモーダル

ダイアログなんかを表示したとき、下にあるボタン類が押せなくなるアレを実装する。 Unityは5.2.0f2。 ※修正 非アクティブなときにも有効なのを修正しました ※修正2 Unity5.2.1対応コードを追記 ぱっと実装する alpha=0にしたImageを全画面に配置し、raycast…

スプライトアニメーションを使いまわす法

概要 Unityの標準機能で、Spriteの切り替わりによるパタパタアニメーションを実装することができる。 が、たとえば複数のキャラクター画像で同じアニメーションを使いたいとき、どうするか。 (Unity5.2.0b4) 1.Spriteを紐づける ベースになるスプライトア…

Unity5.2のUIエフェクト

文字にグラデーションをつける 以前にUnityUIのUIEffectを作成し、文字にグラデーションをつけるスクリプトを書いた。 が、BaseVertexEffectの引数がUnity5.2(まだβだけど)では変更されていて、書きなおす必要がある。 5.1までのコード public override vo…

フルスクリーン時に黒帯を表示する

Unityではフルスクリーンモード時、解像度をどう設定しても、モニタに合わせていっぱいに引き延ばして表示される。このため、モニタアスペクト比とゲームのアスペクト比が異なれば表示が潰れてしまうことになる。まずい。 この問題を、とりあえず、黒帯を出…

イージング処理

iTweenは便利だけど、ValueToをonupdateで受けて……については流石にアホか!となったので、それならいっそとMonoBehaviourに依存しないイージング処理を書いた。 コールバックとかはない。Valueを呼んだときにその時の値を計算するだけ。 namespace TSKT { p…

文字にグラデーションをつける

すでにありそうなもんだけど、uGUIの文字にグラデーションをかける機能を書いた。 これが こうなる using UnityEngine; using System.Collections; using System.Collections.Generic; namespace TSKT { public class Gradation : UnityEngine.UI.BaseVertex…

Unity5にはGetSortingLayerUserIDがない

エディタ拡張してSortingLayerを扱うとき、レイヤーIDが欲しければUnity4まではGetSortingLayerUserIDを呼べばよかったけど、5からはGetSortingLayerUniqueIDにメソッド名が変わっている。

テキストファイルを新規作成する

Unityのエディタからテキストファイルを作れないっぽかったので拡張してみた。 試してみると、どうもTextAssetをUnityの機能で新規に作るのは無理?じみていたので、File.CreateTextを呼ぶことに。 いちいち書き方がダサいんだけど、ほんとにあってんのかし…

コルーチンを復帰させる

問題 Unityのコルーチンは、オブジェクトがinactiveになると停止し、その後activeにしても動き出さない。 これをなんとかして、activeにしたら再びコルーチンが動き出すようにしたい。 コード public class ResumeTest : MonoBehaviour { IEnumerator routin…

とうふがない話

開発 今更の話題だけど、NotoFontが便利なのでオススメ。 Unity 4.6が出た。と思ったらCandidateとは。 コルーチン 知っての通り、コルーチンは複数フレームまたぐような重い処理を書くときに使える。 で、コルーチンは要するにIEnumeratorを渡せば動くもの…

2D見下ろし型マップ

問題 斜め上から見下ろしたような画面をつくるとき、まず困るのがキャラの描画順。 2D的にキャラを並べただけだとこんな感じになったりする。 OrderInLayerを使えば解決することはできるけど、毎フレーム処理するのも鬱陶しいなあ、とか、他にも色々問題がで…

Tiledを使う

Tiledとは http://www.mapeditor.org/ いわゆるマップエディタ。 前まではPlatinumを使ってたのだけど、ちょっと機能的に不満があったので、切り替えることにした。 ファイルごと、レイヤーごと、タイルセットごと、タイルごとといちいちプロパティを持たせ…

法線無視ライティング

法線情報を無視ししたライティング(画像右4つの豆腐)。ライトからの距離だけで明るさが決まる感じ。 左4つはデフォルトのシェーダ。 使い道はこれから考える。