さけのさかなのブログ

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

Unity

【Unity】TextMeshProでルビ表示

やること TextMeshProのラベルにルビを表示する。 TextMeshProでのルビ表示。上がUnityUI、下がTextMeshPro pic.twitter.com/HOpubc3FTo— enu@遊宴雀2 雀-17 (@_enu) July 19, 2019 コード Unity2019.1.10 github.com 使い方 インポート TextMeshPro(2.0.1…

【Unity】テキストにルビを表示する・2

フリガナ表示+リッチテキストタグ+文字送り処理。「見当」のあたりの色変え範囲が変なのは、ルビをまたいだときのチェックのため。 pic.twitter.com/ElJQv2YTJ1— enu@遊宴雀2 雀-17 (@_enu) July 11, 2019 前回記事にしたルビ表示処理にバグがあって、なん…

【Unity】テキストにルビを表示する

追記 コードが更新されたので新しい記事。 toriden.hatenablog.com やること UnityのUI.Textにルビを表示する。 ルビ表示テスト pic.twitter.com/IRpOPGLTnm— enu@遊宴雀2 雀-17 (@_enu) 2019年7月10日 コード Unity 2019.1 github.com 使い方 リポジトリはU…

【Unity】onValueChangedを発火させずにSliderの値を変える

Unity2019.1でSetValueWithoutNotifyメソッドが追加された。 slider.SetValueWithoutNotify(value); // normalizedValueには対応してないのでこう書く slider.SetValueWithoutNotify(Mathf.Lerp(slider.minValue, slider.maxValue, normalizedValue)); // to…

【Unity】Packageを自作する

Unityのpackageはgithubのリポジトリを参照することができる。ということで自分用のpackageを作ってみる。 github.com github.com 汎用的に書けてる部分ということでさしあたりコレクションと数学まわり。ファイルやインプットまわりもいけそうだけど、コン…

【Unity】範囲が無制限な二次元配列

やること 負の方向にも要素を持てて、リサイズ可能な(というか勝手にリサイズされる)二次元配列を実装する。 やりたいこととしてはDictionary<Vector2Int, T>でいいんだけど、パフォーマンス的にもうちょいマシなものを目指す。 コード gist.github.com こうやって使う va</vector2int,>…

【Unity】Tilemapの拡張機能を導入する

やること UnityのTilemapは機能が物足りなくて、たとえばアニメーションするタイルが使えない。 が、githubの2d-extrasリポジトリに拡張機能が公開されており、アニメーションタイルなんかもこれで使えるようになる。この記事はこれの導入方法について。 手…

【Unity】UI.Textの禁則処理・V2

前回 toriden.hatenablog.com 禁則処理リポジトリをforkして性能を上げた。 今回 V2ブランチを作る 設計を自分になりに使いやすくしていきます。 コア部分の処理にTextコンポーネントは必要ないのでMonoBehaviourから独立。自動改行処理がAPIとして柔軟に使…

【Unity】UI.Textの禁則処理、改良版

tsubakit1.hateblo.jp 上の記事で禁則処理に関しては紹介されているんですが、コードを見るともうちょっと良くできそうだなあ、ということでforkして直してみた。Unity2018.3.6f1。 コード github.com 修正内容としては GC Allocの削減 UIコンポーネントへの…

【Unity】でもDeflate圧縮を使いたい

(たぶん).Netのバージョンが上がったので、UnityでもDeflate圧縮を使えるようになった。というわけでbyte[]を圧縮/伸長するためのコード。世のサンプルコードはFileStream経由ばかりなのでそのままだと使いづらいんよね。 用途としては主にセーブデータな…

【Unity】NativeArrayでもboolを使いたい

概要 NativeArray<T>にはboolを使えないので、ラッパークラスを作って使えるようにする。 コード Unity2018.2.8f1 gist.github.com</t>

【Unity】NativeList自作

概要 NativeArray、ECSやJobSystemとセットで紹介されることが多いけど、普通の配列との違いとしてGCに負担をかけないので、使えるところは積極的に使っていけばよさげ。 そうすると可変長となるNativeListも欲しい。が、未実装。てなわけでここでは最小限の…

【Unity】GooglePlayで配信したときのつまづき

備忘録的に書いておきます。 環境 Unity2018.2.3f1 Google Play Games plugin for Unity 0.9.50 UnityAds 2.0.8 つまづき箇所 UnityAdsが表示されない 症状 Editor上ではちゃんと広告画面(開発用)が出るんだけど、実機だとUnity Ads is not initializedと…

英語翻訳対応やりました

はじめに 作ったゲームの英語対応が終わりました。 steamcommunity.com というわけで、この記事はどんな感じに翻訳作業を進めたかについてです。 対象としては、同じように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