UniTyped属性を付与したクラスの名前空間の階層が深いとき、Viewの名前空間がおかしくなる
yuyu0127 opened this issue · 2 comments
yuyu0127 commented
概要
階層の深さが3以上である名前空間に宣言されたクラスに対してUniTyped属性を付与したとき、Viewクラスが中間の階層の名前空間を全てスキップした名前空間に宣言されるようです。
【例】
NS1.NS2.NS3.NS4.Test
クラスに対してUniTyped属性を付与したところ、Viewが NS1.NS4.TestView
として自動生成されます。
Viewは NS1.NS2.NS3.NS4.TestView
となるのが正しいのではないかと推察されます。
発生コード
次のコードのように、それぞれ異なる階層の深さをもつ名前空間以下にクラスを宣言し、UniTyped属性を付与しました.
using UnityEngine;
using UniTyped;
// 階層なし
[UniTyped]
public class TestRoot : MonoBehaviour
{
}
// 1階層
namespace NS1
{
[UniTyped]
public class Test1 : MonoBehaviour
{
}
}
// 2階層
namespace NS1.NS2
{
[UniTyped]
public class Test2 : MonoBehaviour
{
}
}
// 3階層
namespace NS1.NS2.NS3
{
[UniTyped]
public class Test3 : MonoBehaviour
{
}
}
// 4階層
namespace NS1.NS2.NS3.NS4
{
[UniTyped]
public class Test4 : MonoBehaviour
{
}
}
このとき、自動生成コードの内容が次のようになりました。
// Assembly Assembly-CSharp 2023/05/01 14:01:52
#if UNITY_EDITOR
class UniTypedGeneratedTracker {}
// UniTyped.Generated.TestRootView
// UniTyped.Generated.NS1.Test1View
// UniTyped.Generated.NS1.NS2.Test2View
// UniTyped.Generated.NS1.NS3.Test3View
// UniTyped.Generated.NS1.NS4.Test4View
namespace UniTyped
{
namespace Generated
{
// TestRoot
public struct TestRootView
{
public global::UnityEditor.SerializedObject Target { get; set; }
} // struct TestRootView
namespace NS1
{
// Test1
public struct Test1View
{
public global::UnityEditor.SerializedObject Target { get; set; }
} // struct Test1View
namespace NS2
{
// Test2
public struct Test2View
{
public global::UnityEditor.SerializedObject Target { get; set; }
} // struct Test2View
} // namespace NS2
namespace NS3
{
// Test3
public struct Test3View
{
public global::UnityEditor.SerializedObject Target { get; set; }
} // struct Test3View
} // namespace NS3
namespace NS4
{
// Test4
public struct Test4View
{
public global::UnityEditor.SerializedObject Target { get; set; }
} // struct Test4View
} // namespace NS4
} // namespace NS1
} // namespace Generated
} // namespace UniTyped
#endif
// UniTypedMaterialViewGenerator
ここから、それぞれのViewクラスが宣言される名前空間が表のようになっていることがわかります。
View生成元 | View | 名前空間が一致しているか? |
---|---|---|
TestRoot | TestRootView | ✅ |
NS1.Test1 | NS1.Test1View | ✅ |
NS1.NS2.Test2 | NS1.NS2.Test2View | ✅ |
NS1.NS2.NS3.Test3 | NS1.NS3.Test3View | 🚫 |
NS1.NS2.NS3.NS4.Test4 | NS1.NS4.Test4View | 🚫 |
発生環境
- OS:macOS Ventura 13.3.1
- チップ:Apple M1 Pro
- Unity:2021.3.24f1
- UniTyped:0.1.2
- Unityプロジェクト:「3D (URP)」テンプレートの初期状態にUPM経由でUniTypedを導入した状態
ruccho commented
ありがとうございます、修正をv0.1.3としてリリースしました。
yuyu0127 commented
迅速にご対応いただきありがとうございます!
これで製作中のプロジェクトにも導入できそうです🙏🏻