리스트 순서가 변경되지 않게 시스템 변경

This commit is contained in:
김판돌 2024-03-01 22:09:33 +09:00
parent ce9d968c05
commit 3b93287bfc
12 changed files with 674 additions and 1920 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class ItemPrefab : MonoBehaviour public class EquipmentItemPrefab : MonoBehaviour
{ {
[SerializeField] Image image; [SerializeField] Image image;
@ -18,8 +18,6 @@ public class ItemPrefab : MonoBehaviour
image.sprite = Statics.stringIcons[equipmentData.name]; image.sprite = Statics.stringIcons[equipmentData.name];
} }
public void SelectItem() public void SelectItem()
{ {
UnitSetUiCtrl.Instance.ItemSet(this, equipment, equipmentData); UnitSetUiCtrl.Instance.ItemSet(this, equipment, equipmentData);

View File

@ -1,8 +1,59 @@
using JetBrains.Annotations;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class ShopUiCtrl : MonoBehaviour public class ShopUiCtrl : SingletonMonoBehaviour<ShopUiCtrl>
{ {
[SerializeField] GameObject itemPrefab;
[SerializeField] Transform itemContent;
GameObjectPool<ShopMenuItem> itemPrefabList;
List<ShopMenuItem> onItemPrefabList;
protected override void OnAwake()
{
itemPrefabList = new GameObjectPool<ShopMenuItem>(5, () =>
{
var obj = Instantiate(itemPrefab, itemContent);
obj.SetActive(false);
var clone = obj.GetComponent<ShopMenuItem>();
return clone;
});
onItemPrefabList = new List<ShopMenuItem>();
}
private void OnEnable()
{
Dictionary<long, ShopData> shopDatas = Statics.excelDatas.shopData;
if(shopDatas.Count != onItemPrefabList.Count)
{
foreach (var item in onItemPrefabList)
{
item.gameObject.SetActive(false);
itemPrefabList.push(item);
}
onItemPrefabList.Clear();
foreach (var item in shopDatas)
{
ShopMenuItem shopMenuItem = itemPrefabList.pop();
shopMenuItem.Set(item.Value);
shopMenuItem.gameObject.SetActive(true);
onItemPrefabList.Add(shopMenuItem);
}
if (onItemPrefabList.Count != 0)
onItemPrefabList[0].SelectButton();
}
}
public void SelectShopMenu()
{
for(int n = 0; n < onItemPrefabList.Count; n++)
{
onItemPrefabList[n].ChangeButton();
}
}
} }

View File

@ -58,14 +58,14 @@ public class UnitSetUiCtrl : SingletonMonoBehaviour<UnitSetUiCtrl>
//유닛 장착 아이템 정보 //유닛 장착 아이템 정보
[SerializeField] Image[] equipItems; [SerializeField] Image[] equipItems;
GameObjectPool<ItemPrefab> itemPrefabList; GameObjectPool<EquipmentItemPrefab> itemPrefabList;
GameObjectPool<UnitPrefab> unitPrefabList; GameObjectPool<UnitPrefab> unitPrefabList;
List<ItemPrefab> onItemPrefabList; List<EquipmentItemPrefab> onItemPrefabList;
List<UnitPrefab> onUnitPrefabList; List<UnitPrefab> onUnitPrefabList;
Equipment selectItem; Equipment selectItem;
ItemPrefab selectItemPrefab; EquipmentItemPrefab selectItemPrefab;
DeckUnitInfo selectUnit; DeckUnitInfo selectUnit;
UnitPrefab selectUnitPrefab; UnitPrefab selectUnitPrefab;
@ -75,13 +75,13 @@ public class UnitSetUiCtrl : SingletonMonoBehaviour<UnitSetUiCtrl>
protected override void OnAwake() protected override void OnAwake()
{ {
maxLevel.text = Statics.dynamic["maxLevel"]; maxLevel.text = Statics.dynamic["maxLevel"];
onItemPrefabList = new List<ItemPrefab>(); onItemPrefabList = new List<EquipmentItemPrefab>();
onUnitPrefabList = new List<UnitPrefab>(); onUnitPrefabList = new List<UnitPrefab>();
itemPrefabList = new GameObjectPool<ItemPrefab>(5, () => itemPrefabList = new GameObjectPool<EquipmentItemPrefab>(5, () =>
{ {
var obj = Instantiate(itemPrefab, itemContent); var obj = Instantiate(itemPrefab, itemContent);
obj.SetActive(false); obj.SetActive(false);
var clone = obj.GetComponent<ItemPrefab>(); var clone = obj.GetComponent<EquipmentItemPrefab>();
return clone; return clone;
}); });
unitPrefabList = new GameObjectPool<UnitPrefab>(5, () => unitPrefabList = new GameObjectPool<UnitPrefab>(5, () =>
@ -103,9 +103,10 @@ public class UnitSetUiCtrl : SingletonMonoBehaviour<UnitSetUiCtrl>
//장착된 아이템 스킵 //장착된 아이템 스킵
if (item.equip_unit != 0) if (item.equip_unit != 0)
continue; continue;
ItemPrefab prefab = itemPrefabList.pop(); EquipmentItemPrefab prefab = itemPrefabList.pop();
prefab.SetData(item); prefab.SetData(item);
prefab.gameObject.SetActive(true); prefab.gameObject.SetActive(true);
prefab.GetComponent<RectTransform>().SetAsLastSibling();
onItemPrefabList.Add(prefab); onItemPrefabList.Add(prefab);
} }
@ -297,7 +298,7 @@ public class UnitSetUiCtrl : SingletonMonoBehaviour<UnitSetUiCtrl>
UnitObject.GetComponent<UnitCtrl>().enabled = false; UnitObject.GetComponent<UnitCtrl>().enabled = false;
} }
public void ItemSet(ItemPrefab itemPrefab, Equipment equipment, EquipmentData equipmentData) public void ItemSet(EquipmentItemPrefab itemPrefab, Equipment equipment, EquipmentData equipmentData)
{ {
this.selectItemPrefab = itemPrefab; this.selectItemPrefab = itemPrefab;
this.selectItem = equipment; this.selectItem = equipment;
@ -494,7 +495,7 @@ public class UnitSetUiCtrl : SingletonMonoBehaviour<UnitSetUiCtrl>
if(data.equipment.equip_unit == 0) if(data.equipment.equip_unit == 0)
{ {
//생성 //생성
ItemPrefab prefab = itemPrefabList.pop(); EquipmentItemPrefab prefab = itemPrefabList.pop();
prefab.SetData(data.equipment); prefab.SetData(data.equipment);
prefab.gameObject.SetActive(true); prefab.gameObject.SetActive(true);
onItemPrefabList.Add(prefab); onItemPrefabList.Add(prefab);
@ -526,7 +527,7 @@ public class UnitSetUiCtrl : SingletonMonoBehaviour<UnitSetUiCtrl>
} }
} }
//이곳은 장착 해제 여부밖에 나올수 없어 이렇게 작업됨. //이곳은 장착 해제 여부밖에 나올수 없어 이렇게 작업됨.
ItemPrefab prefab = itemPrefabList.pop(); EquipmentItemPrefab prefab = itemPrefabList.pop();
prefab.SetData(data.change_equipment); prefab.SetData(data.change_equipment);
prefab.gameObject.SetActive(true); prefab.gameObject.SetActive(true);
onItemPrefabList.Add(prefab); onItemPrefabList.Add(prefab);

View File

@ -0,0 +1,43 @@
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class ShopMenuItem : MonoBehaviour
{
[SerializeField] RectTransform image;
[SerializeField] TMP_Text text;
ShopData shopData;
bool isSelect = false;
public void Set(ShopData shopData)
{
this.shopData = shopData;
text.text = shopData.name;
}
public void SelectButton()
{
isSelect = true;
ShopUiCtrl.Instance.SelectShopMenu();
}
public void ChangeButton()
{
if (isSelect)
{
image.offsetMin = new Vector2(-15.0f, -5.0f);
image.offsetMax = new Vector2(0.0f, 5.0f);
text.fontSize = 43.2f;
}
else
{
image.offsetMin = new Vector2 (0.0f, 0.0f);
image.offsetMax = new Vector2(0.0f, 0.0f);
text.fontSize = 36.0f;
}
isSelect = false;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8c8b79657297420469dc212f2f365917
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -14,7 +14,7 @@ GameObject:
- component: {fileID: 4527511323705376602} - component: {fileID: 4527511323705376602}
- component: {fileID: 6185815176258306364} - component: {fileID: 6185815176258306364}
m_Layer: 5 m_Layer: 5
m_Name: Item m_Name: EquipmentItem
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0

View File

@ -0,0 +1,329 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3086105658635249343
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1950698021753127858}
- component: {fileID: 8114450396203332118}
- component: {fileID: 3210298456437778911}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1950698021753127858
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3086105658635249343}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5104001180974357480}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -40, y: 0}
m_SizeDelta: {x: -100, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8114450396203332118
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3086105658635249343}
m_CullTransparentMesh: 1
--- !u!114 &3210298456437778911
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3086105658635249343}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\uBF51\uAE30"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 78b099802c23b534092adfc44d096c87, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 78b099802c23b534092adfc44d096c87, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 36
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &5416104630114880658
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 85777587558956858}
- component: {fileID: 7636872067813712670}
- component: {fileID: 677174188900216239}
m_Layer: 5
m_Name: ShopMenuItem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &85777587558956858
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5416104630114880658}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5104001180974357480}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7636872067813712670
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5416104630114880658}
m_CullTransparentMesh: 1
--- !u!114 &677174188900216239
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5416104630114880658}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8c8b79657297420469dc212f2f365917, type: 3}
m_Name:
m_EditorClassIdentifier:
image: {fileID: 5104001180974357480}
text: {fileID: 3210298456437778911}
--- !u!1 &8164477916431084300
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5104001180974357480}
- component: {fileID: 3171368020173243886}
- component: {fileID: 629978819651830082}
- component: {fileID: 6992400913224331724}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5104001180974357480
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8164477916431084300}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1950698021753127858}
m_Father: {fileID: 85777587558956858}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3171368020173243886
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8164477916431084300}
m_CullTransparentMesh: 1
--- !u!114 &629978819651830082
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8164477916431084300}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 4a1bded4c7e025b479cf04d3eada76c2, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 2.5
--- !u!114 &6992400913224331724
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8164477916431084300}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 0
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 629978819651830082}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 677174188900216239}
m_TargetAssemblyTypeName: ShopMenuItem, Assembly-CSharp
m_MethodName: SelectButton
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: eff92ea72756992419363efaa4940d1a
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because one or more lines are too long