C#

Unity向けタイマーライブラリ「UniTimer」をリリースしました

Git のリポジトリは以下。 github.com 使い方 まんまコピペだけど。 using System; using UnityEngine; namespace Takap.Utility.Timers.Demo { public class SampleScript : MonoBehaviour { [SerializeField, Range(0.5f, 2f)] float timeScale = 1f; priv…

等間隔に並んだ画像データをグリッド毎にトリミングする

例えばスプライトアニメーションで等間隔に並んでいるデータの余白が大きすぎる場合、各画像の余白をトリムしたい場合がありますが、1枚の画像になっている場合トリミングするのはなかなか大変です。今回はそういった画像を 実行例 分かりやすいように極端に…

【C#】appsetting.jsonをコンソールで扱う

コンソールアプリでも appsettings.json が使いたい場合の設定と実装方法及びヘルパークラスの紹介です。 確認環境 この記事は以下環境で確認しています。 VS2019(16.11.4) .NET 5(C#9.0) コンソールプロジェクトが作成済み パッケージの導入 「NuGet パ…

.NET5のWPFにReactivePropertyをセットアップする

以前より圧倒的に簡単にセットアップできるようになっていて逆に混乱してしまったのでメモ書きです。 確認環境 この記事は以下環境で確認しています。 VS2019(16.11.4) .NET 5(C#9.0) WPF プロジェクト作成済み セットアップ方法 Visual Studio のプロジ…

.NET Core/.NET5以降のコンソールアプリでWPFの機能を利用する

.NET でコンソールアプリを作成した場合は WPF 関係のライブラリが使用できません。 static void Main(string[] args) { Bi tmapSource s = null; // CS0103 現在のコンテキストに 'BitmapSource' という名前は存在しません } IDE 上には以下のように提案が…

ディレクトリの中から最新の更新時刻のファイルを取得する

タイトルの通りですが、あるディレクトリ(フォルダ)の中から最新の更新時刻、つまり一番最後に内容を更新したファイルを 1件だけ取得する実装例です。 最近似たような処理を何度も書いた気がするので記事にしてみました。 確認環境 この記事は以下の環境で…

2つのファイルの内容が同じかチェックする

C#で内容を含めて2つのファイルの内容が同じかどうかをチェックする方法です。 処理の流れは、2つのファイルをファイルサイズで比較した後、内容を1バイトずつ比較しています。 FileStreamで1バイトづつ比較しているのでメモリ使用量が少なく比較的高速に動…

【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…

【C#】インターネット ショートカットを普通のショートカットに変換する

Windows 上にあるインターネットショートカットを普通のショートカットに変換するプログラムです。 既定のブラウザに関わらず指定したブラウザ(Chorome)で強制的に開くように変換します。 using IWshRuntimeLibrary; using System; using System.Collections…

【C#】リストのジェネリックを親クラスに変換する

List<T> の T を親クラスやインターフェースに変換したいこと無いですか?継承関係があって安全に変換できるならジェネリックの型は親クラスに互換してても良さそうですが List の T では認められていません。この操作はできないので代替案の話になります。 た</t>…

【C++/CLI】std::functionにマネージドメソッドをバインドする

std::function にメソッドを関連付ける時は std::bind を使用しますが C++/CLI でマネージドメソッドを std::bind 渡したい場合の実装方法の紹介です。 C++11 以降で関数ポインタの代わりに std::function でコールバック呼び出しされるような局面でマネージ…

【C++/CLI】Action<T1, T2>, Func<..>がエラーになる

C++/CLI で Action は使用できるのに Action<T1, T2> 以降が「E2154 ジェネリック クラス "System::Action" の引数が多すぎます」でエラーになる場合の対処方法です。 ソリューションエクスプローラー > 該当のプロジェクト > 参照 > System.Core を追加 どうやら定</t1,>…

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

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

【C#】Zip圧縮できないファイルを作成するツール

タイトルの通りZip圧縮しても圧縮率0パーセントで圧縮前と後でサイズがほぼ変わらないファイルを作成するツールを作ってみました。 作成環境 .NET Frmamework 4.7.2(C#7.3) VisualStudio 2019 Windows Form 成果物 コードとソリューション・バイナリは Git…

【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#】MainメソッドでIDE1006の警告が出る場合

標準テンプレートでは以下のような指摘事項が表示されます。割とうっとおしい。 // IDE1006 名前付けルール違反: 最初の単語 'Main' は、小文字で始まらなければなりません static void Main(string[] args) これは .NET の一般的な名前付けのガイドラインが…

【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; } }…

JSONを整形して保存するC#の実装例

未整形の JSON を整形してファイルに保存しなおす C# プログラムの実装例です。未知の構造の JSON フォーマットを扱うので Newtonsoft の JSON ライブラリ(の JObject )を使用します。 実装環境 .NET Core 3.1 C# 9.0 VisualStudio2019 Windows10 実装コー…