Shader error in 'Hidden/PostProcessing/FinalPass': Input signature parameter (1-based Entry 3) type must be a scalar uint. at line 44 (on gles)

Android版をビルドすると以下のようなエラーが出て困ってました。

Shader error in 'Hidden/PostProcessing/FinalPass': Input signature parameter (1-based Entry 3) type must be a scalar uint. at line 44 (on gles)

Player Settings -> Other Settingsの「Auto Graphics API」のチェックを外すとビルドが通ります。

しかししばらくするとまたエラーが出ます。エラーが出たら先の項目のチェックを戻すとエラーを回避できます。

チェックを入れたらもしくは、はずしたら回避できるというわけではなく切り替えてしばらくはエラーが出ないという...

で、ちゃんとした解決策としてUnityの方に教えてもらったのですが、PostProcessing 3.1.0にしたら直りました。

以下の修正ですね。

github.com

Could not collect Google Advertising ID というエラーが出て、広告がちゃんと出ない

以下のようなエラーが出た。

[DataCollector] Could not collect Google Advertising ID - this will negatively impact your eCPMs! Please integrate the Google Play Services SDK into your application. More info can be found online at http://developer.android.com/google/play-services/setup.html. If you're sure you've integrated the SDK and are still seeing this message, you may need to add a ProGuard exception: -keep public class com.google.android.gms.** { public protected *; }
com.google.android.gms.common.GooglePlayServicesIncorrectManifestValueException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 12451000 but found 8298000. You must have the following declaration within the element:
at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(com.google.android.gms:play-services-basement@@17.6.0:32)
at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(com.google.android.gms:play-services-basement@@17.6.0:2)
at com.google.android.gms.ads.identifier.AdvertisingIdClient.zza(Unknown Source:17)
at com.google.android.gms.ads.identifier.AdvertisingIdClient.zza(Unknown Source:17)
at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(Unknown Source:47)
at com.applovin.impl.sdk.m.c(Unknown Source:15)
at com.applovin.impl.sdk.m.j(Unknown Source:2)
at com.applovin.impl.sdk.e.f.run(Unknown Source:6)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

ちなみにメディエーションツールにはMAXを使っている。

mBaaSとしてNCMBを使っているのだけれど、そちらをインストールしたときに、Plugin/Android/res/values/version.xmlが追加され、そこに


8298000

という記載があった。ここに書かれた数値を、8298000から12451000に変えたらエラーが出なくなりました。

UniRxで一定時間マウスオーバーで情報表示

カードゲームを作ったんですが、一定時間マウスオーバーでカードの情報を表示したかったのでUniRxでやってみました。結構スッキリ書けて満足。

そのゲームはこちら↓
unityroom.com

    void Start()
    {
        const float mouse_over_time = 2.0f;
        var eventTrigger = gameObject.AddComponent<ObservableEventTrigger>();
        eventTrigger
            .OnPointerEnterAsObservable()
            .SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(mouse_over_time)))
            .TakeUntil(eventTrigger.OnPointerExitAsObservable()) //PointerExitされたらストリームをリセットする
            .RepeatUntilDestroy(this.gameObject) // 死ぬまで以上を繰り返す
            .Subscribe(_ =>
            {
                cardInformation.SetActive(true);
            });

        eventTrigger
            .OnPointerExitAsObservable()
            .Subscribe(_ =>
            {
                cardInformation.SetActive(false);
            }).AddTo(this.gameObject);
    }

WebGL ビルドで謎の OnJointBreak2D 関連のエラーが出る

Unityroomに投稿しようと思ったら、OnJointBreak2Dが云々という謎エラーが出て困ってました。

Unityのバージョンを落としてみたり、.Netを2.0から4.0に切り替えてみたり、色々と試してみたものの対処できずにいたところ、Twitterで以下のつぶやきをみつけました。


link.xmlってなんぞ?って思ったんですが、どうもこれを書いて置いておくと、そこにかかれたモジュールがコードストリップでストリップされないというものらしいです。

コードストリップが問題ということは、そもそもコードストリップを切ればよいのでは?っと思って試してみたところ、Developビルドでは、out of memoryで死んでしまいました。

Release ビルドでは行けました。けどメモリの無駄だしストリップは有効にしたい。

というわけで、先のTweetAndanteさんに、どういうふうにlink.xmlを書けばよいのですか?と聞いたところ親切に教えていただけました。教えていただけたlink.xmlを置いたところ無事にエラーは出なくなりました。

後でブログにまとめていただけるそうなので、詳細はそちらにゆずりここには書きません。

ちなみにlink.xmlはAssetsフォルダ以下に置けば良いようです。公式サイト探しても全然そういう記述が見つけられず苦労しました。

WebGL ビルドで謎の OnJointBreak2D 関連のエラーが出る

Unityroomに投稿しようと思ったら、OnJointBreak2Dが云々という謎エラーが出て困ってました。

Unityのバージョンを落としてみたり、.Netを2.0から4.0に切り替えてみたり、色々と試してみたものの対処できずにいたところ、Twitterで以下のつぶやきをみつけました。


link.xmlってなんぞ?って思ったんですが、どうもこれを書いて置いておくと、そこにかかれたモジュールがコードストリップでストリップされないというものらしいです。

コードストリップが問題ということは、そもそもコードストリップを切ればよいのでは?っと思って試してみたところ、Developビルドでは、out of memoryで死んでしまいました。

Release ビルドでは行けました。けどメモリの無駄だしストリップは有効にしたい。

というわけで、先のTweetAndanteさんに、どういうふうにlink.xmlを書けばよいのですか?と聞いたところ親切に教えていただけました。後でブログにまとめていただけるそうなので、中身はそちらにゆずり、ここには書きません。

ちなみにlink.xmlはAssetsフォルダ以下に置けば良いようです。公式サイト探しても全然そういう記述が見つけられず苦労しました。

ほぼフルカスタムのMacbook Pro 2019 16-inch VS Macbook Pro 2020 M-1 13-inch

開発にMacbook Pro 16-inchを使っているんですが、Unityでのゲーム実行やコンパイル、ビルドに時間がかかって、ファンがガンガン回ってうるさいので、話題のM1 Macを買ってみました。

乗り換えてみたものの、そんなに早くなった気がしない。

むしろ遅くなった気もする。

それぞれのスペックは以下

Macbook Pro 2019 16-inch Macbook Pro 2020 M1 13-inch
Processor 2.4 GHz 8-Core Intel Core i9 Apple M1
Memory 32 GB 16GB

ベンチマークサイトでの比較

Macベンチマークサイトで性能を見て比較すると以下のように、
Mac Benchmarks - Geekbench Browser

MBP 2019 16-inch MBP M-1 2020 13-inch
シングルコア 1092 1701
マルチコア 6849 7358

これによると特にシングルコアでM1圧勝じゃないか。なのに遅くなったように感じるとはなんぞや。

体感だけで言っててもしょうがないので条件を揃えて比較することに。

計測結果

計測に利用したのはUnity2020.1.17f1。自分がいま作っているゲームをビルドしました。

MBP 2019 16inch MBP 2020 M1 13inch
Unity Libraryフォルダ削除して起動 4:29 6:20
SwitchPlatform(PC→Android) 3:37 6:40
Build Apk 10:21 12:23
Build Apk 2回目 4:05 4:35
SwitchPlatform(AndroidiOS) 6:55 11:15
Build iOS 3:55 5:06
ゲーム起動 0:36 0:49

気のせいじゃなかった。全体的にM1マックのほうが2割 ~ 3割程度遅い。

アクティビティモニター使用状況

f:id:wkpn:20210419182552p:plain
MBP2019 16inch
f:id:wkpn:20210419182431p:plain
MBP2020 M1 13inch

これをみるにメモリの差が影響しているのかなぁ。

メインマシンはMBP2019に戻しました。

M1 Mac 何に使おう...

※あとから言われて気がついたんですが、UnityがまだAppleシリコンネイティブ対応していないので、この結果は当たり前っちゃ当たり前な気がしてきました。
Appleシリコンネイティブ対応版が正式に出たら、また試してみようと思います。