Open3

Unity 6 で対応しないとダメなコト || Obsolete になったコト

monrymonry

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));
monrymonry

Package 周り

[Addressables] min version が 2.0.x になるっぽい

Unity 6000.0.0b13 では Addressables 2.0.8 になった。

[Addressables] Built in Data な AssetGroup がオミット

Resources/ の扱いとかを決めていた AssetGroupSchema である PlayerDataGroupSchema がそもそもなくなっていた。
プロジェクトの初期化とかを Editor スクリプトでゴリッとやってる場合にコンパイルエラーになる。

[Analytics] IAnalyticsService.CustomData() が Obsolete になった

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 に上げたところ問題なく動作するようになった。

monrymonry

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);

実機確認してないので、本当にこれであっているかは分からん。