Alpha ClippingしているマテリアルのShadowがEditorではちゃんと表示されるのにビルドではクリップされずに表示される。

Alpha ClippingしているマテリアルのShadowがEditorではちゃんと表示されるのにbuildではクリップされずに表示される。


ここで報告されているバグ
issuetracker.unity3d.com

解決策(ワークアラウンド)
マテリアルのShader設定をComplex Litに設定する(処理は少し重くなっちゃうけど)

UnityのCloud Storageの料金について

UnityからStorageの使用料で請求が来ていて、一体何で使用しているのか分からなかったので問い合わせたところ、Version Controlに関するものと、自動ビルドに関わるものでした。

Version Controlは、元々、Unity Colaboration時代に無料だったから使っていただけだったのでリポジトリを全部削除しました。

削除方法は以下↓
https://support.unity.com/hc/en-us/articles/13820872052884-How-do-I-delete-my-Unity-Version-Control-repository-?source=search&auth_token=eyJhbGciOiJIUzI1NiJ9.eyJhY2NvdW50X2lkIjoyNzI3MDEsInVzZXJfaWQiOjM2MTExMTcwNzkyMywidGlja2V0X2lkIjoxNzE0NTAxLCJjaGFubmVsX2lkIjo2MywidHlwZSI6IlNFQVJDSCIsImV4cCI6MTcwMzcyODY5M30.Ux61O5mUL86lS3gWCC-XuLgbSPNvt85lgSWJNcelxOM


また、Build Automation(旧Cloud Build)で使用しているStorageに関しては、5GBまでは無料だそうですが、5GBを超えた分に関しては、

Storage(GB) x 保存期間(hour) x $0.00019 が掛かるとのこと。
なので、例えばビルド履歴に1GBのビルドがあると何もしなくても1ヶ月あたり、1GB * 24時間 * 30日 * $0.00019 -> $0.1368 が掛かります。

これを避けるには、ビルド履歴からビルドを選んで削除することで使用しているStorage量を削除する必要があるそうです。

これも過去に遡ってビルドを削除しました。

HotReload AssetとUniTask

以下のようなケースでは、コードを追加しても変化がない

        private async UniTask Start()
        {
            while (true)
            {
                Debug.Log("hoge");//後から追加しても反応しない。文字列変更も反映されない。
                await UniTask.Yield();
            }
        }

UniTask内であっても、以下のように呼ばれ直すような場合は大丈夫

        private void Update()
        {
            Hoge().Forget();
        }
        
        private async UniTask Hoge()
        {
            Debug.Log("hoge");//後から追加しても、ちゃんとhogeが出力されるようになる。文字列変更も反映される
            await UniTask.Yield();
        }

HotReloadは関数が呼びなおしされるっぽいので、以下のようにしておけば反映される。できるだけ細かく関数に分けておくようにすると良さそう。

        private async UniTask Start()
        {
            while (true)
            {
                PrintHoge();
                await UniTask.Yield();
            }
        }

        private void PrintHoge()
        {
            Debug.Log("hoge"); //後から追加しても、ちゃんとhogeが出力されるようになる。文字列変更も反映される
        }

~_BackUpThisFolder_ButDontShipItWithYourGame を削除する

ビルドしたときにできるBackUpThisFolder_ButDontShipItWithYourGameを自動で削除する方法。

public void OnPostprocessBuild( BuildReport report )

を使っていたら、なぜUnity Build Automationで何故か処理が走らなかった。
以下にあるコードを使ったらうまくいった。
forum.unity.com

こっちは、
public static void OnPostProcessBuild(BuildTarget target, string path)
を使っていた。
とにかくうまくいってよかった。

Gradle failed to fetch dependencies.などと表示され、ExternalDependencyManagerがエラーになって一向にResolveされない

Consoleにエラーメッセージが出ていたので見てみると、

java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7

っとある。

github.com

に解決策があった。

色々あったけれど、一番末尾ので解決しました。

  1. ~/.gradle/caches/ を削除
  2. プロジェクトのTempフォルダを削除
  3. Unity > Edit > Preferences > External Tools に行く
  4. JDK, Android SDK, Android NDK, Gradleのチェックボックスを一回クリックしてOFFにして、もう一回クリックしてONに戻す

これをやる際にEnable Auto-Resolutionにチェックが入っているとUnity起動直後にResolveが走ってエラーになり、以降Resolveしようとしても処理が走らなくなることがあるので、Enable Auto-Resolutionのチェックは外しておいて、手動でResolveするのが良いです。

Android版ビルド時に 2 files found with path 'META-INF/kotlinx_coroutines_core.version' のエラーが出る

ApplovinMAXを使いつつ、AdMobを使っている場合に発生するっぽい?

以下に対処法が書いてあった。
forum.unity.com


launcherTemplate.gradle と mainTemplate.gradleの両方に

packagingOptions {
exclude 'META-INF/kotlinx_coroutines_core.version'
}

を追加する。もしくは、

  1. MaxSdk/Mediation/Google/Editor/Dependencies.xmlに行く
  2. com.applovin.mediation:google-adapterのバージョンを22.4.0.0 から 22.3.0.0に下げる
  3. ResolverでdependenciesをResolveする

で解消しました。

GetMainLight()でライトが取得できない

ShaderGraphでライトの色を獲得したいときに、Custom Function Nodeを作って以下のようにすると思います。

#ifdef SHADERGRAPH_PREVIEW
Color = 1;
#else
Light light = GetMainLight();
Color = light.color;
#endif

プロジェクトをUnity 2022にアップデートしたタイミングだと思うのですが、なぜかこのGetMainLight()でライトが取得できなくなっていました。

解決方法

URPの設定ファイル内、Lightingの項目にMain Lightという項目があるんですが、これがDisabledになっていました。
これをPerpixelにすることでGetMainLightが効くようになりました。