「C#」カテゴリーアーカイブ

HotS のミニマップみようツールの作成(2)

今回は Tobii Eye Tracking 4C から視線位置を取得するあたりを実装します。
で、作ったのがこれです。作ってみるとわかる。私は C# の勉強が不足している。 理解が Thread までで止まってて少し恥ずかしい。
https://bitbucket.org/satofumi/hots_tools/src/8548dbecc7af809faf053d7d173b2d73ce3afecf/hots_minimap_instructor/hots_minimap_instructor/EyeTracking.cs?at=default&fileviewer=file-view-default

まぁ、とりあえずこれで動くので良いことにする。気になったらまた修正すればいい。
次回は、この得られた視線情報を用いてミニマップの領域を見ているかどうかで警告音を鳴らすあたりを実装します。

タワーディフェンスゲームを作る(2)

今日は、クリックしたさきに移動先を示すフラッグを表示するあたりを実装します。
フラッグ自体は少し前に Cube, Sphere, Cylinder を駆使して作った。

で、建物を右クリックした後にフィールド上を左クリックすると、そこに移動先の旗が配置できるようになった。やったぜ!

次は、味方ユニットを移動目標に移動させるあたりを実装したい。
いい感じだ。

タワーディフェンスゲームを作る(1)

タワーディフェンスゲームを作っています。純粋なタワーディフェンスではなく、少し RTS 要素を加えたようなゲームにしたい。今は、自ユニットを操作するための入力処理まわりを作成中。

現在の進捗はこんな感じ。

操作まわりを作り直したら、ユニットの移動先を指定できるようになる。
そうすると、基本要素は実装できたことになる。がんばりたい。

 

HotS のミニマップみようツールの作成(1)

Heroes of the Storm というゲームが好きだ。好きだけど上手くない。
なので、上手くなるためのツールを作ろうと思う。
ゲーム画面のミニマップを見るのが重要だけど見てないことが多いので、ミニマップを5秒ほど見なかったら音を出して警告するツールを作る。

使うのは視線検出デバイスの Tobii Eye Tracking 4C で、.NET で C# なアプリケーシンを実装する。

仕様としては

  • ゲーム中にミニマップを5秒見ないことを検出したら警告音を数秒おきに鳴らす。
  • ミニマップを見ない状態からミニマップを見たら、いいね音を鳴らす。
  • ゲーム中とはゲームが開始して死んでない状態とする。

くらい。

まずは簡単なあたり、ゲームが始まったかどうかを検出するあたりから実装する。

最初の実装内容は

  • HotS のゲームが開始しているかを Path.Combine(Path.GetTempPath(), “Heroes of the Storm\\TempWriteReplayP1”) フォルダの有無で監視する。
  • ゲームが開始したら Tobii Eye Tracking 4C からの視線位置の取得を開始する。

を実装する。

で、とりあえずフォルダがあるかどうかを検出して状態遷移をし始めるあたりまで実装した。

https://bitbucket.org/satofumi/hots_tools/src/2a980fbeb6d7bec4c1ce739d84d4591b23390ec9/HotsMinimapInstructor/HotsMinimapInstructor/MainWindow.xaml.cs?at=default&fileviewer=file-view-default

いい感じだ。
次は、視線位置に基づいて音を再生するあたりを実装したい。

ボイスチェンジャー作成(1)

VTuber をやってみようと思って既存のボイスチェンジャーを調べてみた。
そしたら自分でも作ってみたくなったので、作ってみる。

まずは、マイクの音を wav ファイルに出力するプログラムを作ろうと思う。
開発言語は .NET の C# で、マイクは手持ちの UAB-80 を使う。

NAudio を使うことにしたので nuget でインストールする。

NAudio のページに録音のサンプルがあったのでそれを元に Console アプリを作る。
https://github.com/naudio/NAudio/blob/master/Docs/RecordWavFileWinFormsWaveIn.md

で、こんなソースコードでマイクからの入力を wav ファイルとして録音できた。NAudio すごい便利。

    class Program
    {
        static void Main(string[] args)
        {
            var waveIn = new WaveInEvent();
            var writer = new WaveFileWriter("output.wav", waveIn.WaveFormat);

            waveIn.DataAvailable += (s, a) =>
            {
                writer.Write(a.Buffer, 0, a.BytesRecorded);
                if (writer.Position > waveIn.WaveFormat.AverageBytesPerSecond * 30)
                {
                    waveIn.StopRecording();
                }
            };

            waveIn.RecordingStopped += (s, a) =>
            {
                writer.Dispose();
                waveIn.Dispose();
            };

            Console.WriteLine("Start");
            waveIn.StartRecording();

            System.Threading.Thread.Sleep(5000);

            waveIn.StopRecording();
            Console.WriteLine("Stop");
        }
    }

次は、録音した Wave ファイルのデータを可視化して、他の人の声と比べてみようと思う。