【.Net C#】Task をもっと手軽に使いたい

.Net には、マルチスレッドの処理を使いやすくした Task クラスがありますが、使いやすいとは言え、かなりの知見が必要になります。
System.Threading.Tasks 名前空間には、クラスだけでも以下の種類があります。

.Net 8.0 の System.Threading.Tasks 名前空間に含まれるクラスの一部
※タップまたはクリックすると大きい画像で表示します。

.Net のような、あらゆるシチュエーションで使えるように構成された API では、多種多様な機能を用意するのは正しいと思います。
ただ、スレッドプールの恩恵をつまみ食いしたいようなときには、学習コストが高すぎます。
そこで、学習コストをほとんど必要としないマルチスレッド用クラスを作りました。

“【.Net C#】Task をもっと手軽に使いたい” の続きを読む

古(いにしえ)の技術、固定少数点数とは?

少数を100倍とか10000倍とかして整数で扱う手法です。

浮動小数 3.14 ⇒ 固定少数 314

今のゲーム開発では使わなくなったんじゃないでしょうか。
正確には「固定少数点数」ですが、長いので「固定少数」と呼ぶことにします。

メリット
1.昔のハードウェアでは float や double より int の方が計算が速かった。
2.float や double 特有の誤差が出ない。

デメリット
1.int を float や double に変換するのが面倒。
2.速度の問題なら、今のハードウェアでは float か double で良い。
3.誤差の問題なら、誤差が出ない実数型を使えば良い。

“古(いにしえ)の技術、固定少数点数とは?” の続きを読む

【Python】参照渡しなんてなかった

検索すると「Python には参照渡しがある」という情報が多数ヒットするんですが、正しくは以下の記事の通り。

参照渡しと同じことをしたい場合はどうすれば良いのか?

Python は戻り値を複数返せる

20年以上前に MIDI でアレンジした悪魔城ドラキュラⅡの BGM が出て来た

KONAMI(C)

引っ越しで荷物を整理していたら、古い USB メモリが出て来たので、中身を見てみたら、20年以上前(1999年のものもある…)に作った MIDI ファイルが出てきました。

USB メモリが普及するまでは CD-ROM や DVD-ROM でバックアップしてきたファイルです。
USB メモリにコピーしたことをすっかり忘れていました。
当時のデータは、もうなくなったものだと思っていたので、ビックリするやら、嬉しいやら、恥ずかしいやら…。

『悪魔城ドラキュラⅡ~呪いの封印~』の BGM を MIDI でアレンジしたものや、オリジナル楽曲も入っていました。
せっかくなので、バックアップも兼ねて公開しようと思います。

“20年以上前に MIDI でアレンジした悪魔城ドラキュラⅡの BGM が出て来た” の続きを読む

【C#】OpenAI の GPT 3.5 を使って AI とチャットするプログラムを作る【.Net Standard 2.0】

興味があったので、こちらの記事を参考に ChatGPT と対話するコンソールアプリを C# で作りました。
今回作成したのは、OpenAI との通信部分だけで、アバターのモデル表示などは扱っていません。

本稿では、OpenAI の API を利用し、GPT 3.5 で通信する方法、OpenAI の API を利用する際の注意点などについて説明します。
本稿に掲載しているソースコードは、以下の環境で動作確認しています。

Visual Studio 2022
.Net Standard 2.0
C# 7
Windows 11 Home

“【C#】OpenAI の GPT 3.5 を使って AI とチャットするプログラムを作る【.Net Standard 2.0】” の続きを読む

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

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

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

2023/10/15 修正
Visual Studio 2022 ではターゲットフレームワークを .Net Standard 2.0 に変更する方法が違うので記事を修正しました。

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

【デザインパターン】アダプター(Adapter)パターンの本質とは?原点に戻って考え直してみる。

この記事は、Design Patterns(いわゆる GoF 本)の一次ソースである原典にあたり、GoF が提唱したデザインパターンの本質を理解しようと試みた記録です。

今回はアダプターパターンについて調べます。

原典は Amazon で購入できます(Kindle 版もあります)。
※画像をクリックすると Kindle 版の購入ページに飛びます(アフィリエイトではありません)。

“【デザインパターン】アダプター(Adapter)パターンの本質とは?原点に戻って考え直してみる。” の続きを読む

【.Net】アプリのパスを取得する方法っていくつもあるけど何か違うの?【C#】

.Net アプリ パス…で検索すると、だいたい以下の4つのメソッドとプロパティが見つかります。
どの記事を見ても、どれを使っても良い…みたいなことが書いてあります。

  • Application.StartupPath
  • Assembly.GetExecutingAssembly().Location
  • AppDomain.CurrentDomain.BaseDirectory
  • Environment.CurrentDirectory

でも、ふと疑問がわきます。

「どれを使っても同じ結果を得られるなら、なんで4通りもの方法が用意されているんだろう?」

同じものを4つに分ける意味はありません。
本当に「同じ」なら、1つあれば良いはずです。

実はこれ、作成するアプリや目的によって使い分ける必要があります。

“【.Net】アプリのパスを取得する方法っていくつもあるけど何か違うの?【C#】” の続きを読む

【UE5】レベルエディタにウィジェット(UMG)を表示する方法【c++】

マニアックなことに挑戦する機会があったので、技術共有したいと思います。

ゲームを起動中に UMG を表示するのは簡単ですが、ゲームを起動していないときに UMG をレベルエディタに表示するのは面倒工夫が必要でした。

以下の環境で動作確認しています。

Unreal Engine 5.1.1
Visual Studio 2022
Windows 11 Home

“【UE5】レベルエディタにウィジェット(UMG)を表示する方法【c++】” の続きを読む

【UE5】ウィジェットブループリント(UMG)の変数をバインドすることなく(UPROPERTYを使わずに) C++ で取得する方法【C++】

こちらの記事で、ウィジェットブループリントと C++ のソースコードをバインドする方法を紹介しましたが、バインドできない状況がまれにあります。
そんなときに、ブループリントの変数(ブループリント側で作成した変数)にアクセスする方法を紹介します。

以下の環境で動作確認しています。

Unreal Engine 5.1.1
Visual Studio 2022
Windows 11 Home

“【UE5】ウィジェットブループリント(UMG)の変数をバインドすることなく(UPROPERTYを使わずに) C++ で取得する方法【C++】” の続きを読む