Unity

【Unity】画像をスクリプトから動的にスライスする

Unity で画像をスライスするには テスクチャーのインスペクターで、SpriteMode を Multiple に変更して SpriteEditor から Slice を指定すれば一つの画像をあらかじめ複数に分割することができますが、これだとちょっと都合が悪い時があるので、こういった事…

【Unity】Sprite.Createが遅い場合の対処法

3500x3500 のテクスチャーを 100x100 に切り出して1125個の Sprite を作成したら Ryzen 5900 なのに 30秒程度かかったため Sprite.Create の生成速度がヤバいなと思ったので調べました。 プロファイラーで見たところ1枚生成するのに 19ms もかかっていたので…

【Unity】吸い付くスクロールを実装してみた

メニューをスクロールしたとき中途半端な位置てスクロールを停止すると、近くの要素に位置が吸い付くように移動する動作をマグネットメニューとかマグネットスクロールと呼んだりするらしい?のですが、今回はその実装方法を紹介です。 サンプル動作 実際に…

【Unity】上下左右を表すThickness型を作成する

C#のGUI表現技術ののXAMLには上下左右を表す Thickness 型というものがありますが Unity にはありません(ないですよね? なので今回はこの Thickness 型を作成して特定の操作を簡単にしたいと思います。GUIの上下端を表したり 確認環境 今回実装・確認を行…

【Unity】HSV用のColor型を作成する

Unity の色指定ができる Color はインスペクター上からだと RBG(byteで0-255, float0~1.0fの2種類)、HSVの値の指定ができますがスクリプト上で color プロパティから Color オブジェクトを取得した場合中に入っている値は RBG となっています。 この Color …

【Unity】Mathf.LerpとInverseLerpの覚書

使うときは頻繁に使うし使わないと全然使わないのでなかなか覚えられない Mathf.Leap と InverseLLeap の挙動のメモです。 Mathf.Lerp リファレンスの説明は以下の通り。 // [a, b] の範囲内で補間する値 value を生成する線形パラメーター t を計算します f…

【Unity】リングコマンドを実装してみた

タイトルの通り Unity で リングコマンドを実装する実装例の紹介です。UI要素をリング状に配置したように見せて左右で最前面の要素を変更できます。 リングコマンドですが実際の動作は以下のような動きになります。 youtu.be 確認環境 Unity 2020.3.12f1 Win…

【Unity】OdinのHorizontalGroupの使い方

UnityでEditorを拡張するためのアセット「Odin」の機能でインスペクター上に変数を水平に表示できる HorizontalGroup の使い方です。 基本的に公式のマニュアルを見ればOKですが日本語のこのサイトは2017年のものでこれを参考にするとうまく動かなかったので…

TextMeshProでドット風フォントをいい感じに表示する

初めに TexeMeshProでドット風のフォント(8bitのビットマップ風フォント)をきれいに表示する方法まとめてみました。 ドット風のフォントって有名なのが3種類くらいあるじゃないですか。これらって個人的には長らくゲーム中で使うとなかなかきれいに表示され…

TestMeshProで日本語フォントを作成する(2020.3.11f1)

TextMeshPro でフォントを作成する方法のうち、久しぶりに作業すると手順を忘れがちのフォント作成手順と設定値の意味のメモです。 確認環境 今回の確認環境は以下の通りです。 Unity 2020.3.11f1 Windows 10 TMP Importer で Import TMP Essentials 済み フ…

【C#】少し変わった拡張メソッドを作成する

C#では既存のクラスにメソッドを追加できる「拡張メソッド」という機能があります。 今回はこの拡張メソッドの少々変わった使い方の紹介です。 確認環境 今回の確認環境は以下の通りです。 .NET Core5(C# 9.0) VisualStudio 2019 Windows 10 拡張メソッド…

【Unity】アニメーション終了時にメソッドを呼び出す

あるアニメーションが終了したとき(=AnimationClipの終了時)にコールバックを受け取る方法の紹介です。 背景 少し前まで Unity が公開していた(今はアーカイブ化されて更新終了してる) SimpleAnimation を使っている時に、あるアニメーションの終了時に…

【C#】ビットフィールドのenumから値をすべて取り出す

ビットフィールドして宣言された enum (=FlagsAttribute が付与されているenum型) に複数の値が指定されている場合に設定されてるすべての値を別々に取り出す実装例の紹介です。 変数内メンバーを全て列挙する 例えば以下のようにビットフィールドとして宣言…

UnityEngine.RandomとSystem.Randomがあいまいなのを解決する

タイトルの通りですが、以下のように2つの名前空間を using すると Unity のクラス名と C# の標準ライブラリのクラス名が同じためエラーが出ます。 using System; using UnityEngine; public static class Sample { public static void Foo() { // エラー CS…

ValueObjectでファイルパスとファイル名を区別する

string 変数が xxxFilePath と書いてあってファイル名しか入ってない、xxxFileName と書いてあったのに中身はファイルパスということが頻発したりこのstring型そもそも何が入ってるのかわからないなんて事が頻発したので対応策を考えました。プリミティブな…

【C#】リフレクションでnullチェックを自動化する

リフレクションを使って null チェックを自動化する方法です。 C# で null チェックをする場合以下のようなコードを書くと思います。 // サンプル用のクラスと変数宣言 public class Sample { public int A { get; set; } public int B { get; set; } } var …

【C#】コンストラクタの挙動まとめ

C# のコンストラクターの宣言のされ方による呼び出しの基本的な動作のまとめです。暗黙のコンストラクターと継承したときの挙動を中心に確認しています。内容は自分用のメモです。久しぶりに気にすると動きを忘れていることがあったので改めて文字に起こして…

【C#】ValueObjectの実装例

この記事は、int や string の代わりに使用する値はプリミティブ型だけど値が特定の意味を持つため型にして区別したい時に使用する immutable(不変性:一度作ったら以降に内容が変化しないよう) なオブジェクトを実現ための C# での実装例の紹介です。 こ…

【Unity】JsonUtilityで配列とリストを処理する

Unity の JsonUtility の話です。Unity では JSON をオブジェクトに変換(デシリアライズ)したり、オブジェクトを JSON に変換(シリアライズ)するための JsonUtility というライブラリがあります。 この JsonUtility というライブラリ動作が非常に高速で…

【C#】リフレクションでオブジェクトの内容を比較する

リフレクションを使ってオブジェクトを中身で比較する方法です。 C#でオブジェクトを比較するときは以下のようにコードを書くと思います。 // サンプル用のクラスと変数宣言 public class Sample { public int A { get; set; } public int B { get; set; } }…

C#で再帰を使わずにフォルダ内のファイルを列挙する

再帰処理を使わないでC#でフォルダ階層をたどってファイルをリストアップする方法の紹介です。 最後に記載がありますが実際はフォルダを巡回する必要ありません。C#はAPIをひとつつ呼ぶだけで実装できます。 再帰処理を使ってファイルを列挙する 再帰処理を…

【C#】文字列の先頭だけを大文字 or 小文字に変換する

ある文字列の中の1文字だけを大文字・小文字に切り替える方法の紹介です。 C#の標準ライブラリにはこういった操作が存在しないので自分で実装することになります。今回は string クラスの拡張メソッドとして実装します。処理効率は特別な外部ライブラリを使…

Yの位置が下にある画像は手前に表示する(Z座標制御編)

前回、2Dゲームの画像表示時に Transparency Sort Mode を Custom Axis にすることで Y が下にあるオブジェクトほど手前に表示する + 補助コンポーネントを作成する記事を書きましたが、今回は Y 位置が下にある画像ほど手前に表示する処理を Z 位置を使って…

Transparency Sort ModeがCustom Axisの時に前後が入れ替わる位置を表示する

初めに 2Dのゲームで画面を立体的に見せるためにY軸が下にあるものほど手前にオブジェクト描画するという技法があります。 これ「Isometric Sorting」と呼ぶのかわからないですが(自分の中ではY軸ソートと呼んでいました)が、Unityでは Transparency Sort …

【C#】2つのDictionaryを1つにマージする

2020-09-11 2つの Dictionary を 1つの Dictionary にマージして1つにまとめる方法の紹介です。 確認環境 実装コード Linqでマージする 実行速度の比較 確認環境 確認環境は以下の通りです(とはいってもどの環境でも動きます。 .NET Core 3.1 Windows10(Cor…

【C#】System.Text.Jsonでオブジェクトのシリアライズ・デシリアライズ

2020-08-27 .NET Core 3.0 から使用可能になった新しい標準ライブラリに含まれるJSONシリアライザーの System.Text.Json の使い方の紹介です。以前取り上げた、【C#】標準機能でJSON をシリアライズ、デシリアライズする - PG日誌 を代替する標準の実装方法…

【C#】16進数文字列とバイト配列の相互変換

ちょっと何の役に立つか分からないですが、16進数の文字列をバイトの配列に見た目通りに変換する方法です。 long型などの有限長の型を経由しないため基本的に無限長の長さをそのまま扱えます。 変換方法のサンプル 以下のように確実に16進数文字列と分かって…

【Unity】JSONのシリアライズ・デシリアライズの性能比較

Unity環境で使用できる JSON をシリアライズ・デシリアライズできるライブラリとパフォーマンスを調査したいと思います。 はじめに Unity で使用できるJSONライブラリ レギュレーション 確認環境 使用するJSON型 使用するクラスの定義 測定結果 1件を100回シ…

【Unity】モーダルダイアログを実装する(2019.4版)

タイトルには2019.4版と書きましたが特に新機能を使っているわけではないです。新しい環境でもできるよーって感じです。Unity は uGUI というUI作成機能があるのでかなり簡単にダイアログが実装できます。ほとんどコードも書かないで大丈夫です。そこでアプ…

【Unity】効果音(SE)の再生と音割れ防止処理の実装

確認環境 効果音再生の基本 効果音の同時複数再生は音割れ問題が起きる 同じ効果音再生を遅延させるコンポーネント 使い方 実装コード例 確認環境 この記事は以下環境で制作・確認を行っています。 Unity 2019.4.2f1 Windows10 VisualStudio2019 効果音再生…