【C#】GetEnumerator() の使い方まとめ

動作環境
.Net 6.0
Visual Studio 2022

IEnumerator<T> GetEnumerator()

この特殊なメソッドの使い方を調べたので、そのまとめ。
「GetEnumerator ってよく聞くけど、使い方はよく分かんない」という人向け。

大きく分けると以下の2つの目的で使用

  1. foreach でグルグル回すために使う
  2. コルーチンとして使う

“【C#】GetEnumerator() の使い方まとめ” の続きを読む

【Fallout4 CreationKit】Mod Organizer v2.x で起動する方法

インストール方法

Fallout 4 の Creation Kit は Steam からダウンロードするようになりました。
Fallout 4 があるフォルダにインストールしないと起動しません。

Mo2への登録方法

Mo2 から起動する場合、以下の手順で登録を行います。


歯車のアイコンを押す
※マウスオーバーすると「Mod Organizer を経由して起動できる実行可能ファイルを構成する」を表示されます。


以下のように入力
タイトル Creation Kit
実行ファイル インストールした Creation Kit の実行ファイルを選択
開始フォルダ インストールした Creation Kit があるフォルダを選択
Steam AppIDの上書き…をチェックするとテキストボックスが表示されるので 1946160 を入力


追加、または、変更ボタンを押す

Mo2から起動する方法

Mo2 の「実行」ボタンの隣にあるプルダウンリストから Creation Kit を選択して、「実行」ボタンを押す

資料

Fallout4: Creation Kit の AppID が掲載されている Steam の公式ページ
https://steamdb.info/app/1946160/

【C++】Visual Studio Code で MinGW を使って C++ の boost をコンパイルする

・Visual Studio を無料で使える人数を超えてしまう
・エンタープライズ企業に当てはまる

などの理由で、会社や派遣先のクライアントが Visual Studio Professional のライセンスを用意してくれない場合に Visual Studio Code を使うことになります。
C# はわりと良い子なのですが、C++ のセットアップはすこぶる面倒です。
ググっても英語サイトや古い情報、不十分な情報の断片ばかりヒットするので、Cygwin や Linux 環境でコンパイルした経験がない人にはハードルが高いと思います。
個人利用とか、特にこだわりがないなら Visual Studio を使った方が断然良いです。

Visual Studio Code で C++ の boost が使えるようになるまで、2時間くらい格闘したので、セットアップ手順を書きます。

“【C++】Visual Studio Code で MinGW を使って C++ の boost をコンパイルする” の続きを読む

【.Net C#】Thread.Sleep と Task.Delay が遅い

ゲームを作るときに Unity を使ったりする場合は気にする必要がないのですが、そういったツールを使わない場合、FPS を固定させるために1フレーム未満で処理が完了したら残りの時間待つ…という処理が必要になります。

※本稿での FPS は、ファーストパーソンシューターの略ではなく、フレーム・パー・セカンド(毎秒のフレーム数)のことです。

そうしないと、フレームレートが一定にならないので FPS も一定になりません。
ゲームのスピードが毎フレームバラバラになり、カクカクした動きになります。

FPS 60 の場合、1フレームは 16.6666…ミリセカンド以内に処理する。
FPS 30 の場合、1フレームは 33.3333…ミリセカンド以内に処理する。

ゲームループ(float delta_time) {
 ゲームの色んな処理をする
 if (1フレーム未満で処理が終わってる) {
  余った時間待つ
 }
 次のフレームの処理へ
}

疑似コードで表現すると、上記のような処理になります。
本稿では、上記疑似コード中の「余った時間待つ」処理を .Net を使って実装する場合の注意点について説明します。

“【.Net C#】Thread.Sleep と Task.Delay が遅い” の続きを読む

【Python】3.x系で sys.stdin や input() でエラーが出るときの解決方法

Uninstall Python 2.x from your computer.
Pyton 2系をアンインストールする。

UnicodeDecodeError: ‘cp932’ codec can’t decode byte バイトコード in position 行番号: illegal multibyte sequence

3.7 系から 3.9 系に変えたら、UTF-8 で記載したテキストファイルの読み込みでエラーが出るようになった。
これは open(パス, ‘utf-8’, モード) とエンコードを指定することで出なくなる。

【C++/C#】Closure(クロージャ)って何?

C++ を使っているチームのソースコードを見てるとクロージャという言葉をちょいちょい目にするのですが、C# だと全く見ないですね。
厳密な定義はないっぽい(ぼんやりとした定義はある)ので、人によって認識がバラバラです。
なので、「関数オブジェクトのことっぽいけど、なんでクロージャって言うんだろう?関数オブジェクトとは違うの?」という疑問があったので調べてみました。

“【C++/C#】Closure(クロージャ)って何?” の続きを読む

【Unity】手軽に Addressables Assets System を使う

Addressables(旧称 Addressables Assets System)(以下、アドレッサブル)はアセット・バンドルを使いやすくしたものですが、それでも簡単なテストプロジェクトで使おうとすると重く感じます。

パッケージをインストールして、グループ作って、アドレス設定して、ビルドして、非同期読み込みして、あ、using しないとメソッド呼べない、どの名前空間使えばいいんだっけ…?

これだけやることがあれば重く感じるのも無理ないです。

ということで、「手軽にアドレッサブルを使う場合はここを見ればOK」という記事を書くことにしました。

“【Unity】手軽に Addressables Assets System を使う” の続きを読む

【Unity】衝突時に角度を固定する

ハンマーを的にぶつけて刺すゲームを想定(物理エンジンあり)。

何もしない場合は、こんな刺さり方もします。


ハンマーの柄が的に刺さるのがOKなら問題ないです。

的は板とかコンクリートブロックみたいな硬いものを想定しているので、ハンマーの柄が的に刺さることを想定していない場合はNGになります。

NGの場合はそれっぽく見せる必要があります。

“【Unity】衝突時に角度を固定する” の続きを読む