Unity 5.5.1でIAPを含んだプロジェクトが面白いくらいCPUを食う問題について


概要

やあ、全国のUnity5.5.1のCPU使用率が100%を超えるみんな。

問題とその解決策を見つけたのでちょっと書いた。



Unity 5.5.0 -> 5.5.1へと移行したら、CPU使用率がウケル感じになる

スクリーンショット 2017-02-22 20.06.51.png

こんな感じに。


症状としては、

・IAPの利用コードがあるプロジェクトをPlayをすると、UnityのCPU使用率がすっげーアガる

・Playを停めても上がったまま

・Unity再起動すると治るが、Playを押すとまた発生する


というもの。


と言っても問題なのはプロジェクトではなく、プロジェクトに含まれている

Unity IAPのライブラリのバージョン だった。



古いバージョンのUnity IAPライブラリが含まれているプロジェクトを新しいUnity EditorでPlayするとCPUが青天井になる

ということがわかった。


解消方法としては簡単で、

・Unity IAPのライブラリを更新する

という感じ。


具体的にいうと、

スクリーンショット 2017-02-22 16.39.53.png

Unity IAP is up to date 

って出るまでReimportボタンを押せばいいと思う。



問題点の切り分け

まず、あるコードを実行すると、CPUが跳ね上がっているという情報をもらった。環境はUnity5.5.1p4とのこと。

自分の方では手元に5.5.1p3があったので、まずp3で同じ事象が起こるかどうか試してみた。


・5.5.1p3であるプロジェクトをPlay、確かにCPU使用率がいい感じに跳ね上がるのを確認した。

・同じプロジェクトを5.5.0p4でチェックすると、CPU使用率は跳ね上がらなかった。

・そのプロジェクトは5.5.0p4での生成時に取得していたIAPのdllを含んでいた。

・5.5.1p3で動作時、どの処理があったらCPUが跳ね上がるのか確認していくと、IAPの関数を実行した時点からCPUが上がって行くのが確認できた。


という感じ。



実際にCPU持って行く箇所はどこなのか

実際にCPUを持っていくのは、UnityEditor上でPlayを押した際、StoreのアイテムIdとかを設定する処理を行う部分。

UnityPurchasing.Initialize 関数の中。


一度Playすると、たとえ停止をしてもそのCPUのアガりっぷりは衰えない。

なにこれこわい。


該当の UnityPurchasing.Initialize 関数自体を実行しなくなると、CPUが跳ね上がる問題は消える。

まあ課金処理ができなくなるんですけど。


Unity IAP、自分自身ではバージョンが古いからアップデートしてね!みたいなこと一切言わないのだけれど、

もしかしてな~~って思ってServicesのIN-APP-PURCHASING の項を見に行ったら、更新できるよっていう感じだったので

二度ほど押せて、二度コンパイルが走ったあとで治った。



今後の対処方

こういうのなんか、、難しいね、、、

実行コード上からは、IAPライブラリのバージョンを気にするようなことはないので、エラーの原因に気づけない。

UnityのServicesのUIを見に行ってやっと気づく。というかそこを見ても原因かどうかは気づけない。

試して「あっ治った」っていう状態があるのが、まあ、今の俺、という程度。



UnityEditorのバージョンと、配布されてたIAPのライブラリの食い合わせ問題みたいなのがあるんだろうか。

このエディタだったらこのバージョン以上のIAPライブラリ使ってなかったらWarning みたいなのは作れるかもしれないな。


UnityのIAPのライブラリ、痒いところに手が届く素晴らしいバランス(運用スタイルによるがAndroidとかの堅牢性を信じてない人であれば全く問題ない設計)なので

極力使用したい。



追記

他にも原因となる要素があるっぽい。

自分の場合はこれだった、、のか?よくわかってないが出てない。

続報が出せたら書く。