2021-01-01から1年間の記事一覧

【C#】前置・後置インクリメントの速度差

若干怪文書っぽいですが、タイトルの件を検証したいと思います。 古参のC言語系プログラマーなら一度は聞いたことがあるかもしれませんが、forループのカウンターとして使用する i や j 等の変数のインクリメントは「前置の方が高速だから前置インクリメント…

【C#】タプルの色々な宣言方法と受け取り方

C#でタプルの宣言方法と受け取る方法ですがバリエーションがいくつかあって知らないと冗長な書き方になっているときがあるので、宣言のしかたと受け取り方を紹介したいと思います。 確認環境 .NET 5, C#9.0 VisualSturio 2019 Windows 10 宣言方法と受け取り…

URP+2DRendererで画面の一部に綺麗なブラーをかける

いわゆるすりガラス効果みたいな感じで URP + 2D Renderer で画面の一部にきれいなブラーをかける方法です。 前回以下の記事で URP の 2D Renderer でも画面の一部にモザイクやブラーをかける紹介をしましたがブラーの見栄えが良くなかったので今回はガウシ…

UIのImage(Graphic)のスクリーン座標を取得する

タイトルの通りですが、以下の記事で紹介されいたコードを元に作成しています。 hacchi-man.hatenablog.com 確認環 Unity 2021.2.5f1 VisualStudoo 2019 Windows 10 実装コード UI 要素の四隅を GetWorldCorners で取得するのは同じですが、基本的に RectTra…

URP+2DRendererで画面の一部にモザイクやブラーをかける

URP + 2DRenderer にすると _OpaqueueTexutre が利用できない(設定しても画像が設定されない)ため旧来の GrabPass を使用したレンダリング結果に対して効果をつけることが直接はできませんでした。旧来、対処法として RenderTexture を使用した実装などで…

【C#】Teamsを退席中にしないツールを作ってみた

2023-08-17 TeamsをはじめとするいわゆるグループウェアってしばらくPCを操作しないと「退席中」と割とすぐに表示さますよね?実際は別の作業してるのに…みたいな状態で誤解を受けないように「退席中」表示になるのを防止するMouseKeeperというツールを作っ…

【Unity】実行中だけCanvasをOverlayにする

はじめに Unity の Canvas は特に画面に追従する必要がない場合 Screen Space Overlay にすることが多いと思いますが、Overlay って実際のゲーム画面と比べてサイズが大きすぎて「ゲーム画面を見ながら UI の調整をしたい」みたいなときに少し扱いづらいので…

【C#】配列をN個に分割する

文字列をSplitで分割する処理は割と見かけますが、ある配列を複数の配列に分割する処理はあまり見かけたことが無いので書きました。 例えば10個の要素の配列を3個ずつの配列に分割して 3 + 3 + 3 + 1要素の配列に分割する場合の処理方法です。 確認環境 以下…

背景を除外してRectTransformの範囲をファイルに保存する

Canvas 内の RectTransform の範囲を背景を無視して切り取って画像に保存する手順です。かなり限定的な状況となりますが uGUI の Image などを子要素に持つ RectTransform を表示されている内容で保存することができます。 まずサブカメラを作成 → RenderTex…

【Unity】UniRxを利用したMVPパターン(MVRP)の実装例の紹介

UniRx 利用した MVP パターン、いわゆる MV(R)P パターンで(Model-View-(Reactive)Presenterパターン)UI の実装例を紹介したいと思います。 今回の記事で実装した UI は以下の通りです。 初めに MV(R)Pパターンは、表示を View, ロジックを Model, 双方の…

Unity 2021.2.3f1でURPがでCS1525エラーが発生する

既存プロジェクトを Unity 2021.2.3f1 にアップグレードしたら URP のパッケージでエラーが発生する場合の対処法です。 発生するメッセージ 発生するメッセージは以下の通りです。 なぜか構文的に間違ってなさそうなURPパッケージ内でエラーが発生します。 L…

【C#】リストや配列をクラス外に安全に公開する方法

この記事は、あるクラスの中で管理しているリストや配列をクラス外に公開して参照してもらう時に安全に公開する方法や考え方や実装の紹介です。 あるクラス内で管理しているリストをクラス外に公開する場合に具体的にどういった危険性があるのか、どうすれば…

【C#】QueueとConcurrentQueueの使い方

C# で キューというデータ構造を扱う Queue<T> クラスと、スレッド排他制御機能付きの ConcurrentQueue<T> クラスの使い方の紹介をしたいと思います。 2つのQueue まず「Queue」ですが一言で言うと、入れたデータが入れた順番に取り出せる入れ物の事を指します。以</t></t>…

All In 1 Sprite ShaderのURPがUnity2021.2.0以降でエラーになる場合

本当は本家に直してもらうのが一番いいけど修正されるまでは自力で直さないと正常に動作しないので修正方法の紹介です。 発生するエラーは以下の通りです。 'CombinedShapeLightShared': cannot implicitly convert from 'half4' to 'struct SurfaceData2D' …

C#でビット操作を簡単に行うラッパークラスの紹介

例えばC#でハードウェアに近い I/O を扱う場合、1チャンネルが ushort の1ブロックの読み書きが要求されていて、各ポートはビットごとに割り当てられているなんてケースが割とありますがいちいち出力ポートの設定を読んでビット操作をしてまた書き込むなどの…

The referenced script (Unknown) on this Behaviour is missing!

普通は Console から該当の警告メッセージを選択知ればヒエラルキーで missing の場所にジャンプできますが以下のようスタックトレースがネイティブな出力で対象のオブジェクトにジャンプできない & ヒエラルキー上をいくら探しても警告が出ていない場合、プ…

Universal RP(URP)を2Dプロジェクトに設定する(2021.2版)

なんとUnity Hub の新規作成に「2D URP」がテンプレートに追加されているので2Dでライトを積極的に使っていきたい、みたいな人はこれを選べばそのまま URP の 2DRenderer が設定済みのプロジェクトが選べるようになっています。 この場合説明不要ですが、後…

中カッコのないif文の命令文を自動改行しない

VisualStudio 2017 および 2019 でオートフォーマットに関する以下の 2つの状況が発生した場合の設定方法です。 中カッコのないif文を改行しない using ステートメントの中カッコを改行しない なぜか1行で記述したい中カッコを省略したif文の命令文が新しい…

URPでPostProcessingの効果をゲーム画面だけに適用する

Unity の URP 環境で Post Processing の効果をゲーム画面だけに適用して UI には効果を適用しない設定の紹介です。 通常、Main Camera に ゲーム画面と UI を映した状態で Vignette(画面の端が暗くなる効果)を適用すると UI の端が暗くなって見づらくなっ…

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

Unity向けのタイマーライブラリ「UniTimer」をリリースしました。 Git のリポジトリは以下の通りです。 github.com Github の README と内容は同じですが、このライブラリの説明などは以下となります。 動作環境 Unity 2020.3 以降 このライブラリを使用する…

All In 1 Sprite ShaderのURPセットアップ手順

Unity のアセットストアにある「All In 1 Sprite Shader」の URP 用の設定方法です。 忘れるたびにマニュアルのリンクから解説動画見てねが割とツラいのでまとめました。 確認環境 この記事は以下の環境で作成及び動作確認を行っています。 ViauslStudio 201…

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

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

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

コンソールアプリでも App.congi に代わる新しい定義ファイルの形式である appsettings.json を使用する場合の設定と実装方法の紹介です。 ASP.NET Core および ASP.NET 5~6 であれば、IServiceCollection.Configure にセクション名を渡せば勝手に内容をオ…

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

以前より圧倒的に簡単にセットアップできるようになっていて逆に混乱してしまったのでまとめておきます。 確認環境 VS2019(16.11.4) .NET 5(C#9.0) WPF プロジェクト作成済み(.NET, .NET F/W, .NET CoreどれでもOK) セットアップ方法 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バイトづつ比較しているのでメモリ使用量が少なく比較的高速に動…

【UniRx】ReactivePropertyのスニペット

UniRx の利用例に ReactiveProperty を public で公開する実装が例示されていたりするのですがそれはちょっと違うんじゃないかなと思ったので記事にしました。 簡単な実装例 public readonly ReactiveProperty<int> Value = new ReactiveProperty<int>(); // IntReacti</int></int>…

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

2022-01-28 画像を縦横に等間隔でN個に分割(スライス)した場合、左上から右下になるように番号を振って、X=3,Y=6のような位置を指定するのが分かりやすいかと思います。 するとテクスチャーは、原点が左下なので位置計算が必要になります。毎回そのような操…

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

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