Unity エディターはエディターの内部メソッドにアクセスするためにリフレクションを使用しません

質問:

この質問は、Game Framework 公式グループ (216332935)Liuyiからの質問です。

タイムラインは UnityEditor を参照します。TimeArea は内部タイプです

Timeline が配置されているコードには正常にアクセスできますが、独自に拡張されたエディター クラスにはアクセスできません

この記事は以下を参照しています。

https://blog.csdn.net/akof1314/article/details/111773851

Unity Editorを使用してエディタツールを作成する場合

エディターで内部クラスやメソッドにアクセスできないことがよくあります。

反射を使用する必要がある

リフレクションのメソッドを書くのが面倒、Unityがバージョンアップして内部インターフェースが変わるとリフレクションに失敗する

答え:

公式コードを参照してください

https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/AssemblyInfo/AssemblyInfo.cs

たくさんあることがわかります。

[アセンブリ: InternalsVisibleTo(“Unity.InternalAPIEditorBridge.00x”)]

この部分は、独自のエディター クラスを拡張するために公式に提供されています。

練習

エディターの下に新しいフォルダーを作成します

フォルダーには次のファイルが含まれています。

TestTimeArea.cs書類

using UnityEditor;

public class TestTimeArea : EditorWindow
{
    
    
    private TimeArea m_timeArea = null;

    private void OnEnable()
    {
    
    
        if (this.m_timeArea == null)
        {
    
    
            this.m_timeArea = new TimeArea(true)
            {
    
    
                hRangeLocked = false,
                vRangeLocked = true,
                hSlider = true,
                vSlider = false,
                margin = 10f,
                scaleWithWindow = true,
                ignoreScrollWheelUntilClicked = true
            };
        }
    }
}

TestTimeArea.asmdef書類

{
    
    
    "name": "Unity.InternalAPIEditorBridge.001",
    "references": [],
    "optionalUnityReferences": [],
    "includePlatforms": ["Editor"],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "overrideReferences": false,
    "precompiledReferences": [],
    "autoReferenced": true,
    "defineConstraints": []
}

TestTimeArea.csこれで、ファイルが正常にコンパイルでき、正常に使用できることがわかります。UnityEditor.TimeArea

おすすめ

転載: blog.csdn.net/zxsean/article/details/118973229