【Unity 6】Visual Studio 2026で[SerializeField]が入力補完されない?フィールドを先に書くと解決した例

広告

Unityのスクリプトで [SerializeField] を入力しようとしても、Visual Studio 2026の IntelliSense に候補が表示されないことがあります。GetComponent や Transform など、ほかのUnity APIは補完されるのに、なぜでしょうか。

実際に確認した環境では、フィールドを先に書き、その直前で [Ser と入力すると、SerializeField が補完候補に表示されました。この記事では、確認できたことと、考えられる理由を分けて説明します。

どんな現象が起きるのか?

クラス本体にフィールドがまだない状態で、次のように入力します。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [Ser // この段階では候補が出なかった
}

一方で、先にフィールドを作っておきます。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private float moveSpeed = 5f;
}

private の直前にカーソルを移動し、[Ser と入力すると、確認した環境では SerializeField が候補に表示されました。

確認した環境は、Windows、Unity 6000.6.4f1(Unity 6.3以降)、Visual Studio 2026です。

次の図は、この違いを説明用にまとめた模式図です。Visual Studioの実際の画面キャプチャではありません。

解決方法:フィールドを先に書く

  1. private float moveSpeed = 5f; と入力します。
  2. その直前の行にカーソルを移動します。
  3. [Ser と入力し、候補の SerializeField を選択します。

完成形は次のとおりです。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [SerializeField]
    private float moveSpeed = 5f;
}

補完候補が表示されなくても、[SerializeField] を正しく手入力すれば使用できます。補完できないことと、C#のコードとして誤っていることは別です。

[SerializeField]とは何か?

Unityでは、シリアライズ可能な public フィールドは通常Inspectorに表示されます。private フィールドも、Unityのシリアライズ要件を満たし [SerializeField] を付けることで、外部に公開せずにInspectorから値を設定できます。

[SerializeField]
private float moveSpeed = 5f;

なお、プロパティや static フィールドなど、Unityの通常のシリアライズ対象外のものを何でも表示できるわけではありません。

なぜ先にフィールドを書くと補完される?

SerializeField は、以前から、privateフィールドをUnityにシリアライズさせるための属性です。Unity 6.3以降の定義では、この属性に [AttributeUsage(AttributeTargets.Field)] が付き、フィールドにだけ付けられることがC#の定義の上でも明確になりました(Unity 6.3のアップグレードガイド、SerializeFieldのAPIリファレンス)。

そのため、従来は書けても効果のなかったプロパティやメソッドへの指定は、コンパイルエラーになります。

このため、[Ser の時点で直後にフィールドがないと、Visual Studioが「この属性を付けられる場所がない」と判断し、候補から外している、というのが有力な可能性です。フィールドを先に書くと付ける対象ができるため、候補に表示される、と考えると今回の現象と合います。Unity 6.3より前のバージョンでは、挙動が異なる場合があります。Visual Studioのバージョンや更新状況によっても、変わる可能性があります。

Unityのコミュニティでも、この仕様変更と補完候補の関係について、同じ趣旨の説明が投稿されています(Unity Discussions)。

なお、属性を先に書くこと自体は、正しいC#の書き方です。変わったのは書き方のルールではなく、入力途中のコードに対する補完候補の表示です。

それでも候補が出ないとき

補完候補が出ないときは、症状によって原因が異なります。

  • SerializeFieldだけが補完されない:属性の適用先を考慮した候補表示の影響かもしれません。フィールドを先に書いてから、その直前で属性を入力してみてください。
  • GetComponentなどのUnity APIも補完されない:UnityとVisual Studioの連携の問題かもしれません。using UnityEngine; と綴りを確認し、Ctrl + Space で手動の補完表示を試します。それでも出ない場合は、Unityの Edit > Preferences > External Tools で外部スクリプトエディター設定やプロジェクトファイル生成を確認してください。
  • 手入力すれば正常に動く:補完の表示だけの問題で、コードの修正は不要です。
  • 手入力してもコンパイルエラーになる:綴りや、属性を付ける場所(SerializeField はフィールドにだけ付けられます)、参照設定を確認し、エラーメッセージを読んでください。

一方で、SerializeField だけが補完されず、フィールドを書けば候補が現れる場合は、Visual Studioの再インストールを考える前に、まずこの入力順序を試してみてください。

まとめ

Visual Studio 2026で [SerializeField] が補完されないときは、フィールドを先に書いてから、その直前で属性を入力してみてください。今回の環境ではこの順番で解決しました。

大切なのは、IntelliSenseに出ない=使えない機能ではないということです。入力補完は便利な支援機能ですが、その表示だけでコードの正否を判断しないようにしましょう。

参考資料

訪問数 4 回, 今日の訪問数 4回

広告