Unity 6 で対応しないとダメなコト || Obsolete になったコト
Editor スクリプト周り
PlayerSettings.GetApplicationIdentifier(BuildTargetGroup targetGroup)
, PlayerSettings.SetApplicationIdentifier(BuildTargetGroup targetGroup, string identifier)
が Obsolete になった
代わりに Unity 2021.2 から追加された PlayerSettings.GetApplicationIdentifier(Build.NamedBuildTarget buildTarget)
, PlayerSettings.SetApplicationIdentifier(Build.NamedBuildTarget buildTarget, string identifier)
を使う。
UIToolkit で自作 Element を実装する際にはファクトリではなく属性を用いる
Unity 6 では UxmlFactory<T>
が Obsolete になっており、Unity 2023.2 から登場した [UxmlElement]
を使う必要があるとのこと。
Source Generator を使って CreateInstance()
メソッドを持つ Factory を生成しているもよう。
(💭 インタフェースの静的仮想メンバとか使えれば楽なのにねぇ…。C# 11 は大っぴらには使えないから難しいんだろうなぁ。)
Before
public class AwesomeElement : VisualElement
{
public new class UxmlFactory : UxmlFactory<AssetReferenceField>
{}
}
After
[UxmlElement]
public partial class AwesomeElement : VisualElement
{
}
ExecuteDefaultAction(EventBase evt)
によるイベント実行が Obsolete になった
Unity 2021.3 から追加された HandleEventBubbleUp(EventBase evt)
が代替になる。
Before
ExecuteDefaultAction(ChangeEvent<Object>.GetPooled(previousValue, value));
After
HandleEventBubbleUp(ChangeEvent<Object>.GetPooled(previousValue, value));
Package 周り
[Addressables] min version が 2.0.x になるっぽい
Unity 6000.0.0b13 では Addressables 2.0.8 になった。
Built in Data
な AssetGroup がオミット
[Addressables] Resources/
の扱いとかを決めていた AssetGroupSchema である PlayerDataGroupSchema
がそもそもなくなっていた。
プロジェクトの初期化とかを Editor スクリプトでゴリッとやってる場合にコンパイルエラーになる。
IAnalyticsService.CustomData()
が Obsolete になった
[Analytics] Before
AnalyticsService.Instance.CustomData(eventName, eventParameters);
After
var customEvent = new CustomEvent(eventName);
foreach (var (key, value) in eventParameters)
{
customEvent.Add(key, value);
}
AnalyticsService.Instance.RecordEvent(customEvent);
[UniTask] を更新する必要あるっぽい
どのバージョン?とかまでは調べてないけど、少なくとも 2.3.1
だと一部の AsyncOperation
な型を await している箇所でコンパイルエラーが起きてた。
手元の環境では 2.5.4
に上げたところ問題なく動作するようになった。
Runtime 周り
Object.FindObjectOfType()
系メソッドが Obsolete になった
Before
var foo = Object.FindObjectOfType(typeof(Foo));
var bars = Object.FindObjectsOfType(typeof(Bar));
var hoge = Object.FindObjectOfType<Hoge>();
var fugas = Object.FindObjectsOfType<Fuga>();
After
var foo = Object.FindAnyObjectByType(typeof(Foo));
var bars = Object.FindObjectsByType(typeof(Bar), FindObjectsSortMode.None);
var hoge = Object.FindAnyObjectByType<Hoge>();
var fugas = Object.FindObjectsByType<Fuga>(FindObjectsSortMode.None);
Android の RuntimePermission に於ける PermissionDeniedAndDontAskAgain の利用・参照が Obsolete になった
Dont ask me again を押された時の処理方法は PermissionDenied
の方を使いつつ ShouldShowRequestPermissionRationale
を参照しろとのこと。
Before
var permissionCallbacks = new PermissionCallbacks();
permissionCallbacks.PermissionDeniedAndDontAskAgain += permissionName =>
{
// なんか処理
};
Permission.RequestUserPermissions(permissionNames, permissionCallbacks);
After
var permissionCallbacks = new PermissionCallbacks();
permissionCallbacks.PermissionDenied += permissionName =>
{
if (!Permission.ShouldShowRequestPermissionRationale(permissionName))
{
// なんか処理
}
};
Permission.RequestUserPermissions(permissionNames, permissionCallbacks);
実機確認してないので、本当にこれであっているかは分からん。