きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

C#

C#でKey-Valueどちらからどちらでも引ける双方向マップbimap

よく使うので作りました。 使い方 var bimap = new Bimap<int, string>(); bimap[110] = "警察"; bimap[119] = "消防"; Console.WriteLine(bimap[110]); // 警察 Console.WriteLine(bimap["消防"]); // 119 bimap["災害用伝言ダイヤル"] = 171; bimap["天気予報"] = 177; </int,>…

IUniTaskAsyncEnumerableを使って操作の先行入力を実現する

public class Sandbox1 : MonoBehaviour { public void Start() { var channel = Channel.CreateSingleConsumerUnbounded<ICommand>(); SetupWriter(channel.Writer); SetupReader(channel.Reader).Forget(); } private void SetupWriter(ChannelWriter<ICommand> channelWriter)</icommand></icommand>…

特定条件までawaitしつつも毎フレームこれを実行したい!

async/awaitで、特定条件までawaitしつつも毎フレームこれを実行したい!みたいなめっちゃゲームでしか出てこなさそうなことをどう書くと綺麗に書けるか考えている。 とりあえず素直に書くならこう。 var cancellationTokenSource = new CancellationTokenSo…

UnityEditor上でAddressableのAssetを同期的に読む

Testとかのために同期的にAddressableからAssetを読みたい時用。 public static class EditorAddressables { public static AddressableAssetGroup[] GetGroups() { var settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Se…

Unity2020.2でnull許容参照型を使う

null許容参照型って? ドキュメントを読みましょう。 これが欲しかった!最高! Unityで使うには辛さがある SerializeFieldは#nullable enableで囲う。とかは良いとして、 public class Hoge : MonoBehaviour { private HogeComponent _cache; public void S…

MessageBrokerでBaseClassやInterfaceのイベントを受け取る

using System; using Cysharp.Threading.Tasks; using Extensions; using UnityEngine; public class MessageTest : MonoBehaviour { public void Start() => Test().Forget(); private async UniTask Test() { var messageBroker = new TaskMessageBroker()…

TaskMessageBroker

UniRxに入っているAsyncMessageBrokerのTaskバージョン using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; namespace Extensions { public interface ITaskMessagePublisher { UniTask PublishAsync<T>(T message); } public in</t>…

UniTask v2のRCが出たので触ってみた (RC4対応版)

UniTask v2の全機能を紹介してるわけではありません。新機能一覧はReleaseページを追ってください。 RCなので、正式版ではインターフェイスなどもろもろ代わっている可能性があります。 UniTaskのReleaseページから最新版を落として使いましょう。 雑談 Unit…

C#でjstの現在時間を取る

var fixedTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Japan"); var jstNow = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, fixedTimeZone);