きゅぶろぐ

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

スニペット

AddressableでビルドしたAssetBundleのファイルサイズを列挙する

Bundle Naming Modeを"Filename"とかにしていれば出力したファイルを見れば良いだけなのですが、 "Use Hash of Filename"等を使っていると、どのファイルがどのAssetか見分けが付かなくなるので、どうにかしました。 var results = new List<(string, long)>…

Addressableでグループ名とアドレスからHashNameを算出する

AddressableでBundle Naming Modeを"Use Hash of Filename"にしている時に生成されるファイル名を算出する方法です。 そのファイル名で実際にアクセス出来ることのテストとして、ファイルサイズの出力をしてみています。 var groupName = assetGroup.Name.Re…

Unity Input SystemでPlatform毎に決定ボタンを入れ替える

InputActionでCodeGenerateしている場合。 最初はbuttonEastを決定(Submit)、buttonSouthをキャンセル(Cancel)に設定しているとして、 var actions = new InputAction { devices = new[] { device } }; if (Application.platform == ????) { const string ga…

一番最初に再生したAudioClipの頭の音が切れる問題の対応方法

AudioMixerのAudio Mixer Suspendにチェックが入っていると、最初の音の頭がちょっと切れる。 最初から使うならチェックを外す。

AddressableAssetsが存在するかテストする

ただの備忘録。 定義 public static class AddressableAssets { public static class Bgm { public const string Test1 = "Bgm/TestBgm1"; public const string Test2 = "Bgm/TestBgm2"; public const string Test3 = "Bgm/TestBgm3"; } } 使うところ Addres…

TextMeshProのAutoSizeは実行時に使うとめっちゃ重いのでAgileBestFitを使いましょう

uGUIの"BestFit"とかTextMeshProの"AutoSize"、便利だけど流石にパフォーマンス的にヤバすぎん?って思って調べたら公式も「サイズ調べるために使うためのものでサイズわかったら切ってね」って言ってた> TMP AutoSize performance vs UGUI's BestFit? https…

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>…

IDisposableの寿命をシーンに紐付ける

ああ〜このリソース、Sceneの寿命に紐付けたいな〜って時ありますよね。 var disposable = Disposable.Create(() => {}); disposable.AddTo(Lifespan.Scene); これを実現するのが以下のコード。 using System; using UnityEngine; using UniRx; using Object…

特定条件まで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…

Unity iOSで対応言語を設定する

using UnityEngine; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; #if UNITY_IOS using System.IO; using Extension; using UnityEditor.iOS.Xcode; #endif public class IosPostprocessBuild : IPostprocessBuildWithR…

半角は1文字、全角は2文字みたいに数えるやつ

ググるとshift_jisに変換してバイト数数えるやつがよく出てくるんですが、 Unity + Android環境だとI18N.dll突っ込まないと動かないらしいので正確じゃないけどそれっぽい動きするやつ。 正確にやりたい人は頑張ってください。 public static class StringUt…

Unity Editorでsvgからpngを作る

using System.IO; using AkyuiUnity.Editor.Extensions; using Unity.VectorGraphics.Editor; using UnityEditor; using UnityEngine; namespace Sandbox { public static class SvgToPng { public static byte[] Convert(string svg, Vector2Int size) { va…

Unityで画面に描画せずにテキストの幅と高さを取る方法

var fontAsset = AssetDatabase.LoadAssetAtPath<Font>(fontPath); var settings = new TextGenerationSettings { generationExtents = Vector2.zero, textAnchor = TextAnchor.MiddleCenter, alignByGeometry = false, scaleFactor = 1.0f, color = Color.white, </font>…

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>…

Haxe macroでtypeのArrayを定義する

var ct: ComplexType = TPath({ pack: [], name: 'Array', params: [TPType(type.toComplexType())] }); fields.push({ pos: pos, name: "value", access: [APublic], kind: FVar(ct, macro []), meta: [{ name: ":s", pos: pos }] }); ついでに、metaつける…

gitでまじで消せない名前のブランチ作っちゃったときにやったこと

git ls-remote | grep 'hoge' (ブランチ名の一部)でrefsを得る git ls-remote | grep '556dc1c3db16a13a07bd160fb00c5cdda6d89b83' > a.txt hexdump a.txt git push origin --delete $'\xE5\x88\x9D\xE5\x9B\x9E\xE3\x82\xAF\xE3\x83\xAA\xE3\x82\xA2\xE5'

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

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