Unity

Unityと.NET環境で乱数生成を共通化する

タイトルの通り、Unity環境下での乱数生成と非Unityの乱数生成を共通化しようという話です。 何故このようなことをするかというと、非UnityのMonoBehaviorも何もない環境で作成したアルゴリズムをUnityへインポートしたりするときに、UnityのRandomクラスと…

Universal RP(URP)を2Dプロジェクトへ設定する方法

2021-10-30 作成済みの 2Dプロジェクトへ Universal Render Pipeline (URP/Universal RP) を後から設定する手順をまとめました(とはいっても現状これしか設定の仕様がないので唯一の設定方法になります。 確認環境 2Dプロジェクトを作成する Package Manage…

【C#】Unityと.NET標準ライブラリの命名規則の違い

.NET標準は「System名前空間内にあるクラス類」を指します。一方のUnityは「UnityEngine名前空間内にあるクラス類」以下にあるオブジェクト群を指します。それぞれ同じC#言語ですが各々の間で大きく命名規則が異なっています。という訳でちょっとまとめてみ…

C#で1次元配列と2次元配列を相互に変換する

タイトルの通り、1次元配列と2次元配列の相互変換を行う処理の紹介です。 考え方 このような2次元配列を このような配列に変換することができます。 実装コード 早速実装例を紹介したいと思います。 ArrayUtilityクラス 配列に対する操作のため以前紹介したA…

C#でHexタイルの位置を計算する

今回は6角形のタイルの座標の計算を行うライブラリの紹介をしたいと思います。 計算した位置をいい感じに描画すると以下のような感じに並べることができます。 HexLayoutクラス:6角形のタイルを並べる 結構強引に位置を計算していますが、指定した位置を中…

【C#】の1次元配列と多次元配列、リストのアクセス速度の違い

前回の記事で紹介した2次元配列の管理クラスですが中身のデータを「1次元配列を2次元配列扱いする」か「C#固有機能の多次元配列」で行ったときの実行速度に触れましたが今回は実際に速度の違いを計測してみました。 takachan.hatenablog.com タイトルの通り…

【C#】グリッドマップを管理するクラスを作成する

2D のゲーム実装でマップを扱うときは x と y の2次元のマップデータを使うことがありますがこのデータ構造の実装方法を紹介します。 x と y の 2次元のデータですが、中身は 1次元の配列として扱います。なので 1列の配列データを 2次元のグリッドとして扱…

【C#】2次元配列から2次元配列を切り出す

タイトルの通りなのですが、絵にするとこんな感じです。 以下のような2次元配列があった時に 以下のようにある部分を範囲選択して切り取り新しい2次元配列を作成する処理になります。 実装コード ArrayUtilityクラス 使い方 ArrayExtension:拡張メソッド版 …

C#でオブジェクト初期化子を使った時の丸カッコの有無

C#には「オブジェクト初期化子」というインスタンス作成時に使用できる初期化方法があります。 例えば以下のようなクラスがあった場合、公開されているプロパティに対して初期化と同時に値が設定できます。 // クラス宣言 public class Point2Di { public in…

DOTweenのアニメーションをTimeLineでプレビューする

タイトルの通りですがUnityのアニメーションのアセットのDOTweenをTimeLineでプレビューする方法です。 ネットで調べると既に実装されている方が居たのですが現実的に使用するにはもう少し考慮が必要だったので先の実装例をを踏襲しつつ実装を変更 & 設定方…

C#の配列をインデックス付きforeachする

前置き C#の配列をインデックス付きでforeachする方法は純粋なC#では2種類あります。シンプルにforで回すか、LinqでSelectするかです(ループの外にインデックスを宣言すればどの方法でも処理できますが、ここではインデックス用の変数(i)が外に見えない形式…

.NET Core3.xとUnityでAES暗号化を利用する

タイトルの環境でAES暗号化をしてみたので実装方法の紹介をしたいと思います。 AESの実装方法はサンプルがネットに結構転がっているので簡単に説明するだけでいきます。 いちおう、以前 Cocos2d-x 上で AES 暗号化ライブラリを実装しましたのですが、C++に比…

C#の標準機能でデータを圧縮・展開する

C#には結構昔から標準機能として「DeflateStream」と「GZipStream」というデータを圧縮する2種類のライブラリが実装されています。 MSDNに説明が書いてあるのですが読んでもよくわからないと思うので簡単にまとめてみました。 名前 説明 Deflate 可逆圧縮ア…

C#で属性を利用して処理に制約の説明を追加する

属性とは C#に属性(Attribute)という機能があり、これを付ける事でクラスやメンバーに情報を追加することができます。 .NET で使用されている有名なものでは、デバッグ時だけコンパイルされる"Conditionat"属性や、廃止予定を予告するための"Obsolete"属性が…

Unity 2019でのプロファイラーウインドウの出し方

Unity 2019でパフォーマンス計測をするために、CPUプロファイラーを出す場合メニューの場所が以前と変わっています。 // Unity 2019 でのプロファイラーウインドウの出し方 Window > Analysis > Profiler (Ctrl + F7) // 以前のプロファイラーウインドウの出…

【Unity】自動実装プロパティに表示名を指定する

この記事の内容は Unity 2019を含むそれ以前のバージョンを対象にしています。 現在はプロパティに field:SerializeField と付けると名前は正しく表示されます。 以下は Unity 2019 以降では不要です。必要な方だけ参照ください。 また諸事により、プロパテ…

Cocos2d-xをやめてUnityに移行した話@2019冬

2021-02-02 ご注意: 内容は全て個人の感想です。また、好意的な内容ではありません。人によっては不快になる可能性があります。承知の上読んでください。 この記事は、今まで趣味でC++の勉強 & ゲーム制作で Cocos2d-x を使ってアプリ開発していましたが長ら…

Unityエディタのフォント・サイズを変更する「ModifyEditorStyle for Win」

UnityのEditorのフォントを変更できるEditor拡張の「ModifyEditorStyle」をUnity2019向けに手直ししてみました。 2019/12/07:シーンを切り替えると表示が元に戻ってしまう不具合を修正 2020/01/31:2019.3向けの対応 対象 以下のような人が対象です。 Windo…

【C#】リストから要素をランダムにN個取得する

今回は、リストから要素をN個取得する実装方法の紹介をしたいと思います。 いちど選んだ要素はもう使わない + データを取り出した後に元のリストが変化しないように実装していきます。 確認環境 使い方 RandomUtilクラス 関連記事 確認環境 実装環境は以下の…

C#のBigInteger型で超巨大な数字を扱う

C#の組み込み型で最も大きい値を扱える型は、double型です。最大値は、1.7x 10の308乗とありますが、浮動小数点の精度の関係で実際扱える有効桁数が17桁程度なので極大の数値に対し有効桁外の演算を行うと計算結果に反映されない…みたいな状態になります。 …

C#で最大容量つきリングバッファーを実装する

2020-06-12 リングバッファーは、FIFO(ファーストIN, ファーストOUT)つまり先に入れたものが、取り出すときは先に出ていく、Queueと同じような構造を持っています。 リングバッファーって自分のイメージでは、有限のサイズのリングの大きさ(つまり入れら…

C#でリストの特定の要素の位置を変更する

あるリストに入ってる1つの要素の順序(位置)を変更します。 例えば、5番目の要素を3番目に移動したいなどの状況想定します。List クラスを使いますがこのようなメソッドは存在しません。 実装例 順序変更を List クラスの拡張メソッドとして実装したいと思い…

【C#】Listの使い方

配列に動的に要素を追加・削除する場合 C# では List クラス(System.Collections.Generic 名前空間)を使用します。今回はこの List クラスの基本的な使い方を紹介したいと思います。紛

Disposeパターンを実装する

2023-03-02 Disposeパターンパターンですが最近は IDE で クラスが IDisposable の継承を検出すると自動的に Dispose パターンをコードに追加してくれるので具体的な書き方は完璧に覚えている必要が無いですが、Disposeパターンについて調べたので結果をまと…

【C#】regionの使いどころ

2020-09-03VisualStudio上で任意の位置のコードを折りたたむ機能で #region ~ #endgreion ディレクティブというものがあります。「リージョン」と読みます。そんなリージョンですが、以下のように public void Hoge() { #region ナントカの処理 if(this....…

【C#】Dictionaryの使い方

C# でキーと値のペアを管理する連想配列というデータ構造を扱う場合 Dictionary クラスを使用します (System.Collections.Generic名前空間) この記事は、この Dictionaryクラスの基本的な使用方法の紹介です。

【C#】コンストラクターで例外を投げても良いのか?

C#はコンストラクター内で例外を投げても問題ありません。以上。ってだけだと記事が終わってしまうので、以下に補足説明を書いていきたいと思います。コンストラクターで例外を投げても問題ありませんが、コンストラクターでアンマネージリソースを確保した…