yotiky Tech Blog

とあるエンジニアの備忘録

C# 8.0 の主な新機能

目次 目次 リリース時期 null 許容参照型 機能 有効化/無効化 csproj ファイルにオプションを指定する #nullable enable|disable|restore [warnings|annotations] ! (null 免除) 演算子 フィールドやプロパティでの利用 null 許容値型との違い 建設中 コード…

C# の新機能

目次 C# 4.0 C# 5.0 C# 6.0 C# 7.0 C# 7.1 C# 7.2 C# 7.3 C# 8.0 C# 9.0 Unity の対応表 Unity Runtime version (Equivalent) C# version Compiler 2017 .NET 3.5 C# 4.0 mcs (Mono) .NET 4.6 C# 6.0 mcs (Mono) 2018.1 / 2018.2 .NET 3.5 C# 4.0 mcs (Mono)…

C# 9.0 の主な新機能

目次 目次 リリース時期 init 専用セッター Records トップ レベル ステートメント ターゲットからの new 型推論 ラムダ式の引数を破棄 ローカル関数への属性適用 パターンマッチングの拡張機能 コード置き場 リリース時期 .NET 5 init 専用セッター public …

Unity - スライダーでズームイン/ズームアウトする

対象のオブジェクトを中心に、スライダーの値でズームインしたりズームアウトするサンプルスクリプト。 スライダーの値に応じてカメラが移動する。 public class Zoomer: MonoBehaviour { public GameObject playerObject; public Slider zoomSlider; public…

Unity - スライダーで対象を中心にカメラを回転させる(三人称視点)

対象のGameObjectを中心にカメラをスライダーの値で回転(三人称視点)させるサンプルスクリプト。 回転可能な角度を設定して正面からの回転角度に制限を設けている。 public GameObject playerObject; public Slider rotationSlider; public float maxAngle…

WPF から Application Insights に Telemetry を送信する

目次 目次 Application Insights 非HTTPアプリケーション向け 検証環境 手順 パッケージのインストール 実装 実行結果 Application Insights Application Insights は Azure Monitor の機能であり、開発者や DevOps プロフェッショナル向けの拡張可能なアプ…

WPF - DesignerProperties

DesignerProperties はデザインモードか判定に使われるクラスですが、手元の環境で上手く機能しなくなっていたので簡単に調査した結果です。 目次 目次 検証環境 内容 使い方 動作確認 WPF (.NET Framework) WPF (.NET Core) 検証環境 Visual Studio 2019 (1…

WPF - CommandLocker

Button にバインディングしたコマンドを共通してロックする機構 CommandLocker。 github.com ロックの種類は、Guidをキーとしたシンプルなロックと、ロックする時に渡した値をアンロックする際にも渡す必要があるトリガーロックの2種類です。 トリガーロック…

C# - 固定サイズのキュー

ラッパークラス 最小限の実装。Queue がラップされるので Queue で必要な機能は全部中継する必要がある。 public class FixedSizeQueue<T> { private ConcurrentQueue<T> queue = new ConcurrentQueue<T>(); private object lockObject = new Object(); public int Si</t></t></t>…

HoloLens2 に FastEnum を導入する

追記 (2020/11/14) 検証環境 補足 導入 FastEnum MessagePack 追記 (2020/11/14) FastEnum 1.6.0 がリリースされました。 1.5.x では System.Runtime.CompilerServices.Unsafe は 4.7.1 以上が必要でしたが、1.6.0 では 4.5.0 以上になっており、要求される…

Unity Editor の MessagePack CodeGen が動かない原因と一時対処

原因 一時対処 参考 原因 最新の MessagePack for C# (執筆時のバージョンは 2.2.60 ) の MessagePack CodeGen ウィンドウでは、ジェネレートが動かなくなっています。中でdotnet tool コマンドを使っていますが、.NET Core ツールについては前回の記事を…

.NET Core ツール

.NET Core ツール インストール グローバルツール ローカルツール ツールを使用する コマンドを確認する グローバルツールを呼び出す ローカルツールを呼び出す プレフィックス dotnet- 参考 .NET Core ツール dotnet コマンドで、tool SDK コマンドを使うと…

HoloLens2 で MagicOnion v3 を動かす

目次 目次 構築環境 補足 Unity のベース構築 gRPC のコード修正・ビルド Grpc.Core.dll grpc_csharp_ext.dll grpc_csharp_ext_dummy_stubs.c 動作確認 構築環境 MagicOnion.Client.Unity.unitypackage 3.0.12 MessagePack 2.2.60 MagicOnion.Hosting 3.0.13…

HoloLens2 + MRTK 2.5 プロジェクトの初期設定

新規プロジェクト作成時に行うミニマムなお決まりの手順、設定など。(Legacy XR版) 検証環境 手順 オプション 検証環境 Unity:2019.4.3f1 MRTK:2.5.1 VisualStudio:2019 Device:HoloLens2 手順 [Ctrl + Shift + B] で 「Build Settings」 画面を開く […

HoloLens2 でQRコードのスキャンを実装する(位置検知編)

今回は、QRTracking を参考に位置検知を実装します。 最新のコードは実際に扱うには問題が含まれています。 以前は Legacy XR で実装されていましたが、6/18 のコミットで Unity 2019 へバージョンアップするとともに XR Plugin での実装に更新されています…

HoloLens2 で入力方法として QRコード を使う

前回「HoloLens2 でQRコードのスキャンを実装する」では、QRコードスキャンの実装方法を紹介しました。 QRコードのスキャンが使えると、QRコードを介してアプリに文字列を流し込めるようになります。 試しに、入力フィールドの横にQRコードを読み込むボタン…

HoloLens2 でQRコードのスキャンを実装する

目次 目次 検証環境 手順 導入 実装 サンプルプロジェクト 参考 関連記事 検証環境 Unity:2019.4.3f1 VisualStudio:2019 MRTK 2.5 (設定、UI、操作などに) UniRx 手順 導入 NuGetForUnity のパッケージをDLして Import する NuGet > Manage NuGet Packag…

WPF - MahApps の覚書

目次 目次 前提 WindowCommands ListBox HamburgerMenu 参考 ボタンとして使用する ToolTipを表示する 前提 MahApps.Metro MahApps.Metro.IconPacks App.xaml でリソースを読み込む。 <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> </resourcedictionary.mergeddictionaries></resourcedictionary></application.resources>

ZXing を使ってQRコードを動的に生成して表示する

ZXing は "zebra crossing" の略らしく、ゼブラクロッシングと読むのが正解っぽい。 検証環境 導入 実装 パラメータ 実行 検証環境 WPF .NET Core 3.0 ZXing.NET 0.16.6 導入 nuget で ZXing.NET をインストールします。 System.Drawing.Common も使うので入…

WPF - FluentWPF の使い方

Fluent Design System に関しては次のページの通り。 docs.microsoft.com FluentWPF の基本的な使い方はREADMEにあります。 github.com 作者のブログも少し古めですが参考になります。 sourcechord.hatenablog.com ただし、現状 MahApps.Metro との併用は Me…

Unity - スクリプトで LineRenderer を使って線を引く

var head = GameObject.CreatePrimitive(PrimitiveType.Sphere); head.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); head.transform.parent = transform; gazeLine = head.AddComponent<LineRenderer>(); gazeLine.material = new Material(Shader.Find("Sprite</linerenderer>…

WPF - XAML ほかの覚書

目次 目次 リソースを使う 外部リソースを定義する プリミティブ型の利用 Grid の RowDefinitions / ColumnDefinitions の長さを定義する スタイル 使い方 継承 一般 RelativeSource Parameter などに struct を渡す ショートカットキー Loadedイベントでコ…

Unity - Unityを外部プロセスとしてWPFでホストする(Unity as a Library)(2)

前回の記事で WPF で Unity をホストする実装例を紹介しました。 参考にさせて頂いた記事では、続きに Unity の起動画面がWindow全体に表示されてしまう問題を対処しています。 yotiky.hatenablog.com 手元でも同じように全体に表示されたため、続きのコード…

.NET - 子プロセスを確実に終了させる

実装例 こちらやここのコメント欄などが参考になりそうです。今回はQiitaの記事のコードを使わせて頂きました。 public class JobObject : IDisposable { public static JobObject CreateAsKillOnJobClose() { var job = new JobObject(); var jobInfo = new…

WPF - アプリ終了時に非同期処理を実行して終了する

環境 .NET Core 3.1 実装例 終了のイベントをフックして、非同期な後処理を呼びつつイベント自体はキャンセルし、後処理が終わったらそのままアプリが終了するようにします。 public MainWindow() { Closing += MainWindow_Closing; } private bool isCalled…

Unity - アプリ終了時に非同期処理を実行して終了する

環境 Unity 2019.4.3f1 実装例 終了のイベントをフックして、非同期な後処理を呼びつつイベント自体はキャンセルし、後処理が終わったらそのままアプリが終了するようにします。 void Start() { Application.wantsToQuit += Application_wantsToQuit; } priv…

Unity - Unityを外部プロセスとしてWPFでホストする(Unity as a Library)

Unity 2019.3以降、「Unity as a Library」というAndroidやiOSのネイティブアプリに、Unityで作成したアプリをライブラリとして埋め込む機能が提供されています。 この中にはWindowsアプリケーションも含まれています。Windows では以下の3つの方法が紹介さ…

.NET - WebGLをWPFでホストする(WebView2 で Unity as a Library)

Unity 2019.3以降、「Unity as a Library」というAndroidやiOSのネイティブアプリに、Unityで作成したアプリをライブラリとして埋め込む機能が提供されています。 unity.com WebGL 自体はこの中に含まれないのですが、検証ついでに Unity で生成した WebGL …

Unity - System.Threading.Channels で生産者/消費者パターンを利用する

今回は、System.Threading.Channels を Unity に導入した実装例です。 次の記事を参考にさせて頂きました。 qiita.com 前回の記事もご参考までに。 Unity - UniTask の Channel で生産者/消費者パターンを利用する - yotiky Tech Blog 検証環境 以下の環境で…

.NET - System.Threading.Channelsで生産者/消費者パターンを利用する

こちらの記事の写経です。自分用ですので元ページを参照されたし。 qiita.com 実装例 生産者 1 : 消費者 1 static async Task Single() { var channel = Channel.CreateUnbounded<int>( new UnboundedChannelOptions { SingleReader = true, SingleWriter = true,</int>…