8
4

More than 3 years have passed since last update.

【Unity】[Serializable]なSoundPlayerという名前のクラスを作るとビルドは通るがAndroid実機で落ちる

Posted at

はじめに

タイトルままです。
調べても対処法が出てこず、2時間ぐらい詰まったのでメモ。

環境

開発環境
Unity 2019.2.17f1
Windows 10
確認Android環境1
FireHD 10(Fire OS 5.3.7.0)
確認Android環境2
BlueStacks4(OnePlus 5)

エラー本文

logcatで怪しかったところ.txt
01-15 01:46:13.567: E/Unity(15508): The file '/data/app/com.XXX.XXX-2/base.apk/assets/bin/Data/level0' is corrupted! Remove it and launch unity again!
01-15 01:46:13.567: E/Unity(15508): [Position out of bounds!]

解決法

[System.Serializable]なSoundPlayerというクラスの名前を別のものにする(今回はSoundProviderという名前にリネームして解決)

Before

SoundPlayer.cs
namespace Hoge
{
    [System.Serializable]
    class SoundPlayer{
        [SerializeField]
        AudioClip hogehoge;
~~中略

After

SoundProvider.cs
namespace Hoge
{
    [System.Serializable]
    class SoundProvider{
        [SerializeField]
        AudioClip hogehoge;
~~中略

原因

正直よく分からないですが、元々System.Media名前空間にSoundPlayerというクラスがあります。

SoundPlayer クラス (System.Media) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/api/system.media.soundplayer?view=netframework-4.8

おそらくですが[Serializable]ではない同名のクラスが存在するとこのエラーが発生すると考えられます。apk起動時にシーン内のオブジェクトに紐付いたHoge名前空間のSoundPlayerをSystem.Media名前空間内のSoundPlayerでデシリアライズしようとしているとか。

おまけ:解決に至るまで試したこと

上記のエラーをググるとエディタ関係のエラーで参照が切れていると発生するといった記事が出てきます。
が、検索結果に出てきた「LibraryとTempフォルダを削除」、「Reinportする」をしてビルドしても症状は変わらず。

この時点で完全に手詰まりで頭を抱えました。
Previewの「2D Pixel Perfect」パッケージを外してみたりしたものの改善せず。
音を付ける前は起動できていたので最近追加した音周りが怪しいということで音周りのコードを確認しました。
で、SoundPlayerという名前のクラスが別にあったので、自作のSoundPlayerの方の名前を変えたら解決しました。

当てずっぽうだったので、あんまり褒められたものではありませんが、なんとか前に進むことができました。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4