Unity カテゴリーの記事一覧 - きゅぶろぐ

Unity

Enumを簡単にStringとしてシリアライズできるパッケージ作りました

github.com なにこれ? こんなコードを書いてEnumをシリアライズすると、 .unityや.prefabを見ればわかるように、内部的には0, 1, 2というintの値として保存されます。 つまり、Enumの途中に値を追加/削除すると意図しない指定の変更が起きてしまいます。 ↓ …

Unity6で新規プロジェクトを作るとビルドがやけに長い時の対処法。ネタバレ:Forward+はシェーダーコンパイルが長いよ。

Unity6で新規URPプロジェクトを作ると、ビルド時間がやけに長く、 ログを見るとシェーダーコンパイルが遅くなっていることが分かります。 (以下、実測結果はM1 Max MacBook Proによるもの) Unity2021LTS(2021.3.43f1)、Unity2022LTS(2022.3.47f1)、Unity6(…

OnPostprocessBuildでゴニョゴニョしたら、macビルドが "~.app is damaged and can't be opened." と言われ起動しなくなった時の治し方

OnPostprocessBuildなどで.appの中身を直接いじると署名が無効になり壊れる。 public void OnPostprocessBuild(BuildReport report) { // ごにょごにょ #if UNITY_STANDALONE_OSX UnityEditor.OSXStandalone.MacOSCodeSigning.CodeSignAppBundle(report.summ…

Unityのログをファイルに書きつつ出力もする(Windowsのbashでもteeみたいなことがしたい!)

マルチプレイの確認に便利なUnity Multiplayer Play Modeパッケージ!にて、ソースコードを編集してもVirtual Playerに反映されないバグの対処法

Unity6から使えるMultiplayer Play Modeという公式パッケージがあります。 Editor上のプレイボタンを押すと最大3つのプレイヤーが自動で立ち上がり(Editor本体を入れて4つ)、 マルチプレイゲームのデバッグが簡単にできる!という非常に便利なパッケージで…

PresetManagerに登録してあるPresetがちゃんと反映されているか確かめるテスト

AppIconChangerUnity OSダイアログ無効化バージョン

github.com 4年前に公開したこのアプリアイコンを動的に変更できるパッケージ、 たまに「OSのダイアログ(↓の画像のやつ)消せないの?」という問い合わせが来てました。 その時の返信は、 「わかる。邪魔だよね。でもOS側で出してるやつだからどうしようも…

Unity Editorから同じネットワーク上にいるデバイスのプレイヤーにデータを送る

Unity Editorから同じネットワーク上にいるデバイスのプレイヤーにデータを送る https://t.co/fnpTJV1L9n #きゅぶろぐ pic.twitter.com/6Qcy58acdZ— きゅぶんず (@kyubuns) March 3, 2024 UnityEditor.Networking.PlayerConnection.EditorConnection とかい…

Steamでゲームをリリースするときは、セーブデータの保存パスにSteamIDを入れよう!

具体的に言うと、 C:/Users/{UserName}/AppData/Local/{GameTitle}/Save/{SteamID}/ というディレクトリ以下にファイルを置いていくのが理想系かなと思います。 LocalがLocalLowだったり、Saveの部分が違ったりするのは趣味の範囲。 伝えたいことは、 セーブ…

右下の"Development Build"を消すパッケージを作りました

github.com このパッケージをインポートするだけで、画面右下の "Development Build "の表示が消すことができます。 以下のような使用用途が考えられます。 デバッグコマンドを使って、PVの撮影や、アプリストア用のスクリーンショットが気軽に撮れる。 ゲー…

-nographicsオプションをつけてUnity Editorを起動するとRenderTextureが使えなくなる

AppIconChangerUnity では、OnPostprocessBuildでRenderTextureを使用してアイコンの拡縮を行なっていました。 しかし、アイコンが灰色になるというissueが上がってきたため調査をしていたところ、 Unity -quit -batchmode -projectPath . -executeMethod Bu…

(未解決) iOS 16でUnity製アプリが許可していない方向で起動する問題

何が起きてるの? 以下の画像のように "Allowed Orientations for Auto Rotation" を設定しているにも関わらず、 iOS 16(iPadOS 16も言わずもがな)上で、許可されていない方向でアプリが起動してしまう問題が発生しています。 再現方法 このバグは安定的に…

Unityでスクリプトからパッケージ依存を削除する方法

iOS/AndroidではUnityIAPを使っているけれど、Windowsでは使用していない。 それにも関わらず、UnityIAPが有効になっていると勝手にUnity Analyticsも有効になり気持ち悪いから Windowsビルドの時だけパッケージ依存を削除したい・・・みたいなことあります…

SteamDeck上でUnityのVideoPlayerを利用しても動画が再生されない時の解決策

これはゲーム開発者向けの記事です。 プレイヤーの方で対応方法を探している場合は[SteamDeck Proton GE]などでググってください。 症状 Winows上では、正しく動画が再生されている。 SteamDeck上で再生しようとすると、動画の代わりにカラーバーが表示され…

Unityで開発用に「どこでもセーブ」を実現してみる

まえがき ゲーム開発中、何かちょっと変えるたびに、何度も何度も同じ場面まで行って確認するのは面倒ですよね。 現在のシーンの状態を丸っと保存して、そこから再開できる「どこでもセーブ」機能を実現してみました。 Unityで「どこでもセーブ/どこでもロー…

Unityのログ表示を気軽にちょっとだけ見やすくする

Console Windowを大幅に改造してるプロジェクトも多いと思いますが、 気軽にちょっとだけ見やすくしたいこともありますよね。 完成形がこちら。 見た目の特徴 カテゴリ毎に色の違う■が出てて、カテゴリの認識がしやすい パラメーターが読みやすい 書き方の特…

Unityでも便利なLINQメソッドを色々使いたかったのでExtraLINQをさらに便利にしました

github.com Unityでも便利なLINQメソッドを色々使いたかったのでExtraLINQをUPM対応しましたから早一年。 この1年で増えたメソッドを紹介します。 TryGetFirst / TryGetLast DictionaryのTryGetValueっぽく使いたい時に。 if (items.TryGetFirst(x => x.Valu…

Unity2021から追加されたil2CppCodeGenerationを適切に設定するとIL2CPPビルドが最大50%早くなる

Unity2021もLTSがでたので安心して使えますね。・・・使えてますか? それはそれとして、 Unity2021から追加された EditorUserBuildSettings.il2CppCodeGeneration を適切に設定するとビルドが最大50%早くなるというお話です。 使い方 EditorUserBuildSettin…

Unity AndroidでApplication.targetFrameRateが効かないときに見る記事

QualitySettingsからvSyncをDon't Syncsに設定していても(無視される値にも関わらず)意味がないので、必ずスクリプトから QualitySettings.vSyncCount = 0; する必要がある。 Unity Issue Tracker - [Android] Application.targetFrameRate doesn't wo…

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

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

UnityのApplication.persistentDataPathのドキュメントは間違っている

この記事は、2022/03/26時点での情報です。 2022/03現在、Application.persistentDataPathのドキュメントは、 Unity2020.3 https://docs.unity3d.com/ja/2020.3/ScriptReference/Application-persistentDataPath.html Unity2022.1 https://docs.unity3d.com/…

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

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

Unityから簡単にiOSアプリアイコンの動的変更ができるパッケージを作りました! AppIconChangerUnity

github.com AlternateIconについて 基本的にiOSアプリのアイコンは埋め込みで、アプリを更新しない限りアイコンの変更は出来ませんでしたが、 アイコンを埋め込んでおきさえすればアプリ内から変更できる、というのがAlternateIconです。 最近では、デレステ…

Unity2019.2以降、URL schemeのパラメーターはネイティブ書かなくても取得出来るようになってた

2021年の今でも [Unity URL scheme parameter] とかでググると、このプラグインを入れて・・・とかいう記事がたくさん引っかかるんですが、 Unity2019.2以降であれば、 Application.absoluteURL で起動時のURLを取得することが出来ます。 iOSもAndroidも同様…

Time.timeの落とし穴

これは反省文です。 これらの問題に開発終盤に気づくと、影響範囲が広くなりがちです。 知識として入れておきましょう。 Time.time どんなチュートリアルにも最初の方に出てくる、言わずと知れた経過時間を取得する方法。 超基本的なものだと思って、気軽に…

JenkinsでUnityのmetaファイルのコミットし忘れをチェックする

metaファイルのコミットし忘れ or 再起動しただけでmetaに変更が入る状況になっていないかをチェックする。 方法は色々あると思うんですが、結局Unity起動してちゃんとビルド出来るかのチェックとか走らせているので Unityを起動した後に、metaファイルが増…

Unityでも便利なLINQメソッドを色々使いたかったのでExtraLINQをUPM対応しました

github.com 前々から愛用していたmariusschulz/ExtraLINQ。 例えばChunkとか、 int[] numbers = { 1, 2, 3, 4, 5, 6, 7 }; int[][] chunks = numbers.Chunk(3); // chunks = [[1, 2, 3], [4, 5, 6], [7]] Flattenとか、 int[][] numbers = { new[] { 1, 2, 3…

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にチェックが入っていると、最初の音の頭がちょっと切れる。 最初から使うならチェックを外す。