【.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 が遅い” の続きを読む

【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】衝突時に角度を固定する” の続きを読む

C# でツリー構造のデータを使う

なんで .Net にツリー構造のコレクションがないんでしょうね?

TreeNode と TreeView は GUI 用。
Hierarchy は Microsoft SQL Server Analysis Services 用。
TreeElement は Microsoft Docs で検索してもひっかからない。

欲しいのは純粋なツリー構造のデータを扱うためのコレクションであって、余計なメンバは要らない…。
私が探した範疇では .Net には見つかりませんでした。

“C# でツリー構造のデータを使う” の続きを読む

【Unity】C#スクリプトをDLL化する手順

この記事では Unity の C# スクリプトをDLL化する手順と注意点について説明します。

執筆時に扱った Unity のバージョンは 2021.1.6f1 です。
プラットフォームは Windows 10 (64ビット版) を対象としています。

“【Unity】C#スクリプトをDLL化する手順” の続きを読む

【Unity】Google スプレッドシートから直接データを読む方法

この記事では、↑の内容を試してみて、分かりにくかったところや疑問に思って調べたことをまとめています。
補足説明的な感じで読んでいただければと思います。

執筆時に扱った Unity のバージョンは 2021.1.5f1 です。
プラットフォームは Windows 10 (64ビット版) を対象としています。

この記事では、Google スプレッドシートを GSS と略記します。

“【Unity】Google スプレッドシートから直接データを読む方法” の続きを読む

【.Net C#】Enumerator の使い方

この記事では Microsoft .Net Framework の Enumerator および IEnumerable<T> の使い方について説明しています。

動作確認した環境
Microsoft Visual C# Compiler 3.5.0 beta4
.Net Framework 4.8.03752

2021/01/07
サンプルソースコード内 GetEnumerator() の戻り値の型を IEnumerable から IEnumerator に修正。
 
“【.Net C#】Enumerator の使い方” の続きを読む

【UE4】ブループリントを一切使わずに子ウィジェットを操作する

これはアンリアルエンジンのウィジェットブループリント(以下、WBP)に関する記事です。
使用したアンリアルエンジンのバージョンは 4.25.3
ソースコードのビルドには Visual Studio 2017 を使用しました。

“【UE4】ブループリントを一切使わずに子ウィジェットを操作する” の続きを読む

【UE4】自作モジュールの使い方

この記事では、Unreal Engine 4 で自作したモジュールを使う方法について説明しています。

執筆時に扱った Unreal Engine のソースコードのバージョンは 4.25.4
プラットフォームは Windows 10 (64ビット版) を対象としています。
ビルドに使用したアプリ(IDE)は Microsoft Visual Studio 2017 です。

以降、Unreal Engine 4 を UE4 と略記します。 

“【UE4】自作モジュールの使い方” の続きを読む