Skip to content

Commit 9825845

Browse files
committed
refactor(ugui): 对齐 UIPlayerListItem 工厂方法模式
- 移除 [SerializeField],解决 Unity 2022 partial class Inspector 异常 - 补充 Create/GetFromPool 工厂方法,与 FairyGUI 版对齐 - 调用方改用 Create 替代 GetComponent - 移除 prefab 上冗余的脚本组件挂载
1 parent 19d1ff6 commit 9825845

3 files changed

Lines changed: 27 additions & 34 deletions

File tree

Assets/Bundles/UI/UILogin/UIPlayerListItem.prefab

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ GameObject:
165165
- component: {fileID: 6228148823632263274}
166166
- component: {fileID: -3610192480042452226}
167167
- component: {fileID: 6269004123994206221}
168-
- component: {fileID: -5806616165832629512}
169168
m_Layer: 5
170169
m_Name: UIPlayerListItem
171170
m_TagString: Untagged
@@ -290,34 +289,6 @@ MonoBehaviour:
290289
m_OnClick:
291290
m_PersistentCalls:
292291
m_Calls: []
293-
--- !u!114 &-5806616165832629512
294-
MonoBehaviour:
295-
m_ObjectHideFlags: 0
296-
m_CorrespondingSourceObject: {fileID: 0}
297-
m_PrefabInstance: {fileID: 0}
298-
m_PrefabAsset: {fileID: 0}
299-
m_GameObject: {fileID: 2663891887284400065}
300-
m_Enabled: 1
301-
m_EditorHideFlags: 0
302-
m_Script: {fileID: 11500000, guid: f3dbda1f2d8399c48a53b111db902cc9, type: 3}
303-
m_Name:
304-
m_EditorClassIdentifier:
305-
m_Available: 0
306-
m_Visible: 0
307-
m_IsInit: 0
308-
m_IsDisableRecycling: 0
309-
m_IsDisableClosing: 0
310-
m_SerialId: 0
311-
m_OriginalLayer: 0
312-
m_UIFormAssetName:
313-
m_AssetPath:
314-
m_DepthInUIGroup: 0
315-
m_PauseCoveredUIForm: 0
316-
m_FullName:
317-
click_Button: {fileID: 1579662019469304452}
318-
icon: {fileID: 7351945160826255929}
319-
level_text: {fileID: 6842555925901079904}
320-
name_text: {fileID: 6749064955309982402}
321292
--- !u!1 &3333699875826137622
322293
GameObject:
323294
m_ObjectHideFlags: 0

Assets/Hotfix/UI/Logic/UILogin/UIPlayerList.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public override async void OnOpen(object userData)
5050
foreach (var playerInfo in playerList)
5151
{
5252
var item = uiPlayerListItemAssetHandle.InstantiateSync(m_left_Panel_ScrollView_Viewport_Content);
53-
var uiPlayerListItem = item.GetComponent<UIPlayerListItem>();
53+
var uiPlayerListItem = UIPlayerListItem.Create(item);
5454
uiPlayerListItem.m_level_text.text = "当前等级:" + playerInfo.Level.ToString();
5555
uiPlayerListItem.m_name_text.text = playerInfo.Name;
5656
uiPlayerListItem.m_click_Button.onClick.Set(OnPlayerListItemClick, playerInfo);

Assets/Hotfix/UI/UGUI/UIPlayerListItem/UIPlayerListItem.UI.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,31 @@ public sealed partial class UIPlayerListItem : UGUI
2121

2222
#region Properties
2323

24-
[SerializeField] [UGUIElementProperty("click_Button")]
24+
[UGUIElementProperty("click_Button")]
2525
private UnityEngine.UI.Button click_Button;
2626

2727
public UnityEngine.UI.Button m_click_Button
2828
{
2929
get { return click_Button;}
3030
}
3131

32-
[SerializeField] [UGUIElementProperty("icon")]
32+
[UGUIElementProperty("icon")]
3333
private GameFrameX.UI.UGUI.Runtime.UIImage icon;
3434

3535
public GameFrameX.UI.UGUI.Runtime.UIImage m_icon
3636
{
3737
get { return icon;}
3838
}
3939

40-
[SerializeField] [UGUIElementProperty("level_text")]
40+
[UGUIElementProperty("level_text")]
4141
private UnityEngine.UI.Text level_text;
4242

4343
public UnityEngine.UI.Text m_level_text
4444
{
4545
get { return level_text;}
4646
}
4747

48-
[SerializeField] [UGUIElementProperty("name_text")]
48+
[UGUIElementProperty("name_text")]
4949
private UnityEngine.UI.Text name_text;
5050

5151
public UnityEngine.UI.Text m_name_text
@@ -55,6 +55,28 @@ public UnityEngine.UI.Text m_name_text
5555

5656
#endregion
5757

58+
public static UIPlayerListItem Create(GameObject go)
59+
{
60+
var ui = go.GetOrAddComponent<UIPlayerListItem>();
61+
ui?.InitView();
62+
return ui;
63+
}
64+
65+
/// <summary>
66+
/// 通过此方法获取的UGUI,在Dispose时不会释放GameObject,需要自行管理(一般在配合对象池机制时使用)。
67+
/// </summary>
68+
public static UIPlayerListItem GetFromPool(GameObject go)
69+
{
70+
var ui = go.GetComponent<UIPlayerListItem>();
71+
if (ui == null)
72+
{
73+
ui = Create(go);
74+
}
75+
76+
ui.IsFromPool = true;
77+
return ui;
78+
}
79+
5880
private bool _isInitView = false;
5981

6082
protected override void InitView()

0 commit comments

Comments
 (0)