【Unity】一部プラットフォームでのビルドで「Game scripts or other custom code contains OnMouse_ event handlers.~」が出る件について

OnMouseDownなどのメソッドを定義していると、そのスクリプトを使用していなくてもビルド中に下記警告が発生します。

Game scripts or other custom code contains OnMouse_ event handlers. Presence of such handlers might impact performance on handheld devices.

警告が出るメソッド

  • OnMouseDown
  • OnMouseDrag
  • OnMouseEnter
  • OnMouseExit
  • OnMouseOver
  • OnMouseUp
  • OnMouseUpAsButton

いずれもMonoBehaviourから継承しているクラスかつ引数なしであること、が条件。

警告が出るプラットフォーム

UnityCsReference を調べてみたところ判定部分は発見しました。

判定コードはAssemblyReferenceChecker.MethodIsMouseEventでHasMouseEventプロパティに格納されるようになっています。

ただし、これらを呼び出しているコードはUnityCsReferenceで公開されている中では見つからなかったため、ビルド用モジュールやネイティブDLLから呼び出しているのかもしれません。

肝心のどのプラットフォームで呼ばれるかがわからないんですよね。

(もしかしたらこの判定処理もダミーで他で処理している可能性すらある)

ということで、ドキュメントもないしコードを見ても正確な仕様は把握できずでした。

ちなみに、自分が確認した中では以下のプラットフォームで警告が出ています。

  • Android
  • iOS
  • WSA
  • Apple TV

回避策

警告を出さないオプションなどもなさそうで、なおかつそれ自体使っていなかったりパフォーマンスなどで問題になってなければ気にする必要はなさそう。

ただ、アセットなどを公開する場合はユーザーさんにいらぬ心配をかけてしまう可能性もあるので、#define ディレクティブでもって切り分けると良いかもしれませんね。

例えばこんな感じ。

#if !(UNITY_ANDROID || UNITY_IOS || UNITY_WSA || UNITY_TVOS)
#define ENABLE_ONMOUSE_EVENT
#endif

// OnMouse event
#if ENABLE_ONMOUSE_EVENT
void OnMouseDown()
{
    // なにか
}
#endif

こうしておけば、もしユーザーさんがどうしても使いたい場合でもScripting Define Symbolsに「ENABLE_ONMOUSE_EVENT」を追加すれば使用できます。

Unityのアセット販売中!

ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。

詳細はこちら

RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。

詳細はこちら

オススメ!