🎖️

Unity2020からUnityから呼ばれる関数の動作が変わった

2021/03/19に公開

概要

Unity2020より、EditorWindowを継承したクラス(正確にはHostViewを利用するクラス)でUnityから呼ばれる関数の仕様が変わった。

背景

https://github.com/kumaS-nu/NuGet-importer-for-Unity
↑の私の作ったやつで、Unity2020では動かないという issue が来たので色々調べた。

内容

もともと、私のコードでは非同期を使っていたので async Task OnGUI() としていた。しかし、ArgumentException: method return type is incompatible というエラーが出るようになった。
色々調べた結果、Unityの内部で変わったのはここ。

2019
https://github.com/Unity-Technologies/UnityCsReference/blob/2019.4/Editor/Mono/HostView.cs
2020
https://github.com/Unity-Technologies/UnityCsReference/blob/2020.2/Editor/Mono/HostView.cs

つまり、いままでは返り値の値は何でもよかったが2020からは必ず void ではないといけなくなった。(私は async void にした。)
影響を受ける関数は以下。

関数
OnGUI
OnFocus
OnLostFocus
OnProjectChange
OnSelectionChange
OnDidOpenScene
OnInspectorUpdate
OnHierarchyChange
OnBecameVisible
OnBecameInvisible
Update
ModifierKeysChanged
ShowButton

おわりに

まだネットには情報がなかった。やっぱりコード見るの大事。

Discussion