You are currently viewing Unity6.5 GetInstanceIDをどうする?

Unity6.5 GetInstanceIDをどうする?

Unity6.5からGetInstanceIDが廃止(obsolute)となり、コンパイルエラーが発生するようになりました
自分が利用しているアセットの一部でGetInstanceIDが利用されている箇所があり、コンパイルエラーによりプロジェクトがビルドできなくなったため修正を行いました

以下はエラーメッセージの例です

Assets\HurricaneVR\Framework\Scripts\Core\Utils\EditorExtensions.cs(14,51): error CS0619: 'Object.GetInstanceID()' is obsolete: 'GetInstanceID is deprecated. Use GetEntityId instead. This will be removed in a future version.'

GetEntityIdに置き換えれば良い・・・のだけど

GetInstanceIdに代わるメソッドとして、「GetEntityId」が準備されています
ただ、GetInstanceIDとGetEntityIdで戻り値の型が変更されています

GetInstanceID→int型が戻り値
GetEntityId→EntityId型が戻り値

単純な置き換えではなく、ケース別の変換が必要

自分のプロジェクトでは以下のようなケースがありました

ケース1:int型を受け取る場合

既存コードがint型を受け取る場合、EntityIdをint型に変換する必要があります
自分はGetHashCodeを利用しましたが、ハッシュ値の衝突が許されないシステムの場合、別の方法を利用する必要があります

int instanceId = rb.GetInstanceID(); ← obsolete
↓
int instanceId = rb.GetEntityId().GetHashCode(); ← 修正後

ケース2:ディクショナリ型のキーとして利用される場合

ディクショナリ型のキーとして使用される場合、文字列連結で対応しました

_leftInstanceId = "LeftPreview_" + target.GetInstanceID(); ← obsolete
_rightInstanceId = "RightPreview_" + target.GetInstanceID(); ← obsolete
_bodyId = "Body_" + target.GetInstanceID(); ← obsolete
↓
_leftInstanceId = "LeftPreview_" + target.GetEntityId(); ← 修正後
_rightInstanceId = "RightPreview_" + target.GetEntityId(); ← 修正後
_bodyId = "Body_" + target.GetEntityId(); ← 修正後

ケース3:オーバーロードで対応できる場合

メソッドによってはオーバーロードにより、EntityIdがそのまま引数として利用できる場合があります

var path = AssetDatabase.GetAssetPath(so.GetInstanceID()); ← obsolete
↓
var path = AssetDatabase.GetAssetPath(so); ← 修正後

以上です

以上が自分のプロジェクトで発生したGetInstanceIdの修正内容になります
利用メソッドの変更だけであれば対処は簡単なのですが、戻り値の型も変わっているため、コードによって対応方法が分かれる可能性があります

そのため、Unity6.4で開発を行っていて、特に理由がなければ無理にUnity6.5へのアップグレードを行わないことも一つの戦略です

created by Rinker
¥2,860 (2026/06/21 20:01:17時点 楽天市場調べ-詳細)
created by Rinker
¥2,970 (2026/6/21 20:01:36時点 楽天市場調べ-詳細)

コメントを残す