渋谷ほととぎす通信

新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。※あくまで個人ブログであり所属組織とは関係ありません

C#

もう間違えないEnumの値配列を取得する方法

2020年始初っ端からEnumの値をコレクションとして取得する上で間違った扱いをしていたことをメモしておきます。 enum SampleEnum { Ne = 0, Ushi = 1, Tora = 2 } List<SampleEnum> result; //中身が Ne, Ushi, Toraとしたい GetValuesだけでよかった 以下のような無駄な</sampleenum>…

Unityからmicro:bitへ無線通信する方法

以前micro:bitを入力デバイスとしてUnityに無線通信で送信するサンプルを作りました。 今回はUnityを入力デバイスとしてmicro:bitへデータを送信してみます。 準備するもの Unityインストール済みパソコン micro:bit 2個 処理の流れ C#側からUSBにつながった…

RiderがUnityの.NET4環境を認識しない場合の対処法

UnityのPlayer Settingsの.NET4.xに設定を変更すると、Rider側が認識せずコンパイルエラー状態になりコード補完が効かなくなりました。 ※ただし、Unity側は正常にコンパイルは通ります。 Unityの設定画面で解決 UnityのPreferences > Riderから、Override Ta…

C#のActionとローカル関数のどちらを使うべきか調査

上の記事内で書いたソースにローカルメソッドを使ったのですが、それがどういう動きをするのか、Actionと何が違うのかを本記事では調べます。 ローカル関数はC#7から登場 ローカル関数はその名の通り、関数内に定義でき、その関数内でしか参照できない関数で…

DOTweenをasync/await化して可読性の高いコードにしてみる件(キャンセルにも対応)

この辺りの記事からの続きですが、個人的な開発環境をコルーチンからasync/awaitに移行中です。 移行するにあたって、僕が最もよく使うDOTweenのasync/await化は必須で、特にキャンセル周りは演出を作る上では最重要と考えています。 本記事では安全に使いや…

Task.Delayの待機時間をUnityEditor上で計測をしたら少しずれる件

Task.Delayの待機時間が本当に数値通りかを以下のサンプルコードで確認しました。 async void Start() { var t = Time.time; var st = Time.realtimeSinceStartup; await Task.Delay(5000); // ゲーム時間 Debug.Log($"Time.time :{Time.time - t}"); // リ…

C#コンストラクタパフォーマンス比較検証

余程のパフォーマンスチューニングが必要なときしか不要なパフォーマンス検証結果を残しておきます。 インスタンスをnewキーワードで生成する時、コンストラクタに引数を入れるパターンと入れ無いパターンがあります。 // コンストラクタに引数を持たないパ…

async/awaitを使う上でタスクのキャンセルは例外処理であるという考え方に移行する必要がある件

最近async/awaitデビューしたので、完全理解しようと思う。主にキャンセル周り。あと噂のUnitaskとその負荷とコルーチンWorkflowとの比較— 大庭俊介@Unityエンジニア (@ohbashunsuke) 2019年10月18日 この辺りの経緯から基礎的なところからUnityを使う上での…

Dictionary.TryGetValueの書き方がシンプルになってた件

UnityのScripting Runtime Versionを.NET4xに切り替えてから、C#の記述が変わりました。 その中で細かいけど、ちょっとイイと思った部分を共有します。 Scripting Runtime Versionを.NET3.5の時の場合は、Dictionaryの書き方はこうでした。 Object result = …

Rider2019.1アップデートで待望のIL Viwerが実装されている

その昔、UnityをMonoDevelopで開発しているときには身近に存在していたIL Viwer。 Riderに移ってからはそれが無く、不便に感じていましたが、とうとうRider2019.1で実装されました。 ILとは ILとはC#をコンパイルする際に作られる中間言語です。ILを読むこと…

Unity SpriteRendererで表示した画像をドラッグして端から端までピッタリ表示する

結論 X座標ドラッグ可能距離 = 画像サイズ / PixelPerUnit - orthographicSize * (Screen.Width / Screen.Height) Y座標ドラッグ可能距離 = 画像サイズ / PixelPerUnit - orthographicSize で割り出せます。 ※平行投影カメラが前提 以下のコードをドラッグ処…

コルーチンの引数にはref、outは使用できない

タイトルの通り、コルーチンで少しハマったので共有です。 IEnumerator Hoge (ref int foo) { yield return null; foo = 1; } このようにIEnumeratorを返す関数にはrefやoutが使えず、以下のようなエラーが出力されます。 error CS1623: Iterators cannot ha…

C#からC++(DLL)に構造体を渡す その1

VisualC++で作成したDLLに対して、C#から構造体を渡して返してもらうということをやってみます。 まずは手始めに変数が値型のみの構造体からやってみます。 環境周りの話は以前の記事を参考にどうぞ。 www.shibuya24.info 今回作るもの public struct Struct…

C#からC++(DLL)に配列を渡す

しばらくこのC#からC++に渡すシリーズは続きます。 文字列、int型と来て、今回は配列を渡します。 ビルド環境については、シリーズ初回のこちらの記事をどうぞ。 www.shibuya24.info 今回配列をC#からC++に引き渡す上で重要になるのはマーシャリングです。 …

C#からC++(DLL)にintを渡す

VisualC++で作成したDLLをC#からintを渡すということをやります。 環境構築は前回記事を参考にどうぞ。 www.shibuya24.info C++側は値で受け取る C++側のコードから載せますが、前回文字列を渡す際はポインタで受け取っていましたが、C#からプリミティブ型を…

C#からC++(DLL)に文字列を渡す

C++でDLLファイルを作り、それをC#から関数を呼び、C++側に文字列を渡すということをやります。 環境 VisualStudioCommunity2017 v15.9.8 今回作るもの C++製のTestDll.dllというDLLファイルを作成し引数が文字列のTestメソッドを用意します。 C#側から文字…

C#でDirectX11 SlimDXでマウスのスクリーン座標を取得する

SlimDXはぶっちゃけ関係ないのですが、SlimDXを使用する上で、マウス座標を取得したくなるケースがあります。そんな時、DirectInputを使えばよいと勝手に思っていたのですが、あくまでマウスの移動量しか取得できませんでした。 調査の結果、Window.FormのAP…

C#でDirectX SlimDXが使えるようになるまでのちょとした道のり

PCが新しくなったので、SlimDXを使うまでの環境構築をメモっておきます。

Unity2018.3.0からGCを作動させないGarbageCollectorというAPIが追加されている

先日Unity2018.3.0が正式リリースされ、リリースノートを粛々読んだり、Unityブログを舐めている最中です。 気になった機能の一つとして、GCをコントロールするAPIが提供されたようなので検証しておきます。 GarbageCollectorクラスを使う UnityEngine.Scrip…

Unity動的にメッシュを生成するシリーズ

1.Unityで三角形を1つ描画、テクスチャまで貼る この辺りでやっているような三角形1つ描画するということをUnityでもやってみたというプリミティブな記事。 生のWebGLで三角形を描画するショートコード - 渋谷ほととぎす通信 C#でDirectX11 SlimDXで三角形を…

C#でDirectX11 四角形の描画

今まで三角形を描画して、頂点カラーやテクスチャを適用していましたが、そろそろそれらは卒業して四角形を描画します。四角形は2つの三角形を組み合わせるので、四角形を描画するというより、2枚の三角形を描画するということになります。

DirectX11をC#を書きながら覚えていく

SlimDXを使用し、DirectX11をUnityで馴染みのあるC#を通して学んだ記事のまとめリンクです。 目次 0. 環境構築編 SlimDXが使えるようになるまでの環境構築です。 1. ウィンドウ表示 DirectX11の表示先のウィンドウを表示させます 2. GPUを使用して描画する …

C#でDirectX11 UnityのTransform的な親子関係を実装してみる

Unity然り、FlashのActionScript3然り、表示オブジェクトの親子関係がデフォルト機能のように実装されていて、当たり前のように使ってきたのですが、一度理解してしまえば非常に簡単なのでしたが、自前で実装するとなると結構骨が折れました。 ということで…

C#でDirectX 軽い気持ちでSlimDXを使うとき用ライブラリSlimDXSketchを作りました

ここ最近SlimDXを触ってまして、以下の記事を書いてきました。 C#でDirectX11 SlimDXでウィンドウを表示させる - 渋谷ほととぎす通信 C#でDirectX11 SlimDXでGPUを使用して描画する - 渋谷ほととぎす通信 C#でDirectX11 SlimDXで三角形を描画する - 渋谷ほと…

C#でDirectX カリングをOFFにして両面描画してみる

C#でDirectX11 プロジェクション座標変換して三角形を表示させる - 渋谷ほととぎす通信の続きです 前回ビューポート座標系に三角形を表示させて、クルクル回転させました。 ただ、このままでは裏面がない状態でクルクル回ってしまうため、カリングを設定して…

C#でDirectX11 プロジェクション座標変換して三角形を表示させる

C#でDirectX11 三角形を回転アニメーションさせる - 渋谷ほととぎす通信の続きです。 ワールド座標にそのままポリゴンを表示させていましたが、今回はプロジェクション座標変換して、ビューポート座標に三角形を表示させてみます。 まずはシェーダを書き換え…

UnityからArduinoへのシリアル通信

Arduiono HelloWorldしてみる - 渋谷ほととぎす通信の続きです。 今回はArduinoを使ったシリアル通信をやってみようと思います。

C#でDirectX11 三角形を回転アニメーションさせる

C#でDirectX 頂点カラーを使って三角形を描画する - 渋谷ほととぎす通信の続きです。 やっとアニメーションに移ります。 頂点カラー反映済みの三角形をクルクル回してみようと思います。 今回は頂点シェーダ側で回転させてみます。

C#でDirectX11 頂点カラーを使って三角形を描画する

C#でDirectX FPSを管理する - 渋谷ほととぎす通信の続きです。 今回は頂点カラーを使って三角形を描画してみます。 今までと違うのは、頂点データに色情報が入ってくるということです。 ということで、以下前回記事のソースコードからの変更箇所です。 頂点…

C#でDirectX11 FPSを管理する

下記の記事での描画は、MessagePump.Runメソッドを使用しているため、ループ処理の間隔を制御できていませんでした。 SlimDXでDirectXを始めた ウィンドウを表示させる - 渋谷ほととぎす通信 SlimDX GPUを使用して描画する - 渋谷ほととぎす通信 C#でDirectX…