スニペット

C#からGoogle Play Consoleの売上レポートを取得する

AppStoreはこちら → C#からApp Store Connect APIを叩いて売上レポートを取得する 悩んでググってこの記事に辿り着いた方向けの何の補足もない不親切な記事です。 公式のドキュメント using Google.Apis.Auth.OAuth2; using Google.Cloud.Storage.V1; const …

C#からApp Store Connect APIを叩いて売上レポートを取得する

Google Playはこちら → C#からGoogle Play Consoleの売上レポートを取得する 悩んでググってこの記事に辿り着いた方向けの何の補足もない不親切な記事です。 Pkcs8PrivateBlobとかはWindowsでしか動かないので使ってません。 App Store Connect APIのドキュ…

Unity 実機でエラーを検知したときに自動的にコンソールログをslackに送信する

実機上でエラーが発生した時、どうやってデバッグしていますか? AbcConsoleを使っていると、たったこれだけで、 エラーを検知した時(Debug.LogError/LogExceptionが呼ばれた時)に、slackにログを送信できます! slackのtoken取得はこちらのブログなどを参…

最近Editorでのみキャッシュして起動高速化したいものが増えてきたのでEditorPrefsWrapperでも作った

EditorPrefsを気軽に使いたいけど、 UnityEditor.EditorPrefsのためだけにdefine書いたり、 そもそもstringしかダメだから一回シリアライズするのも面倒だな・・・って時のために、 EditorPrefsWrapperを作ったのでメモ。 使い方 MessagePack-CSharpに依存し…

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…

一番最初に再生した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…

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);