캐릭터의 카드 유지보수씬을 작업중이다.
이전에 작업해놓은 내용들이 읽기 힘들고 지저분해 코드를 정리하는 작업을 했다.
기존에는 카드 리스트를 위아래로 드래그해 살펴볼 수 있는 기능과, 카드를 드래그해 카드 버리기 영역에 드랍하면 카드가 버려지는 기능이 있었는데, 드래그 기능이 중복되어 리스트 드래그가 방해받는 문제가 있었다. 해당 문제는 카드선택 후 버리기 버튼을 눌러 버리는 형태로 변경해 해결했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class CharacterMaintenance_Card_Layer : MonoBehaviour, IPointerClickHandler {
[SerializeField] GameObject deckListArea = null;
[SerializeField] Canvas targetCanvas = null;
//버튼
[SerializeField] Button discardButton = null;
//카드 설명창
[SerializeField] Text cardTitle = null;
[SerializeField] Text cardMana = null;
[SerializeField] Text cardDescribe = null;
[SerializeField] Text cardProperty = null;
[SerializeField] GameObject cardManaIcon = null;
//raycast 변수
GraphicRaycaster raycaster = null;
PointerEventData pointer = null;
CardDTO cardDataOnSelect = null;
GameObject cardObjectOnSelect = null;
CharacterInfoDTO characterInfo = null;
GameObject currentPopup = null;
void Start() {
ButtonInit();
}
private void OnEnable() {
Init();
UpdateDeckList();
}
void Init() {
raycaster = targetCanvas.GetComponent<GraphicRaycaster>();
pointer = new PointerEventData(null);
characterInfo = CharacterInfoDAO.GetCharacterInfo();
}
void ButtonInit() {
discardButton.onClick.AddListener(() => {
DiscardCardFromDeck();
});
}
public void OnPointerClick(PointerEventData eventData) {
pointer.position = eventData.position;
List<RaycastResult> results = new List<RaycastResult>();
raycaster.Raycast(pointer, results);
if (results.Count > 0) {
if (results[0].gameObject.transform.GetComponent<CardObject>()) {
if (cardObjectOnSelect != null) {
cardObjectOnSelect.GetComponent<CardObject>().glowEffect.SetActive(false);
}
cardDataOnSelect = results[0].gameObject.transform.GetComponent<CardObject>().CardData;
cardObjectOnSelect = results[0].gameObject;
cardObjectOnSelect.GetComponent<CardObject>().glowEffect.SetActive(true);
UpdateCardDescription(cardDataOnSelect);
}
}
}
void UpdateDeckList() {
Transform[] childList = deckListArea.GetComponentsInChildren<Transform>(true);//기존 레이어에 존재하던 자식들 삭제
if (childList != null) {
for (int i = 1; i < childList.Length; i++) {
if (childList[i] != transform) Destroy(childList[i].gameObject);
}
}
for (int i = 0; i < characterInfo.CardList.Count; i++) {
GameObject obj = FactoryManager.GetInstance().CreateCardObject(characterInfo.CardList[i], deckListArea.transform);
obj.name = $"card_{i}";
}
}
void UpdateCardDescription(CardDTO card) {
cardTitle.text = card.Title;
cardMana.text = card.Mana.ToString();
cardDescribe.text = card.Explanation;
cardProperty.text = card.Property;
cardManaIcon.SetActive(true);
}
void DeleteCardDescription() {
cardTitle.text = "";
cardMana.text = "";
cardDescribe.text = "";
cardProperty.text = "";
cardManaIcon.SetActive(false);
}
void DiscardCardFromDeck() {
if(cardObjectOnSelect != null) {
characterInfo.CardList.Remove(cardDataOnSelect.Number);
Destroy(cardObjectOnSelect);
cardDataOnSelect = null;
cardObjectOnSelect = null;
}
DeleteCardDescription();
CharacterInfoDAO.UpdatePlayerInfo(characterInfo);
}
}
|
cs |
카드를 삭제할때마다 DB에 바로 업데이트하도록 했다.
몇줄 수정만 해줄 생각이었는데 생각보다 지우고 다시 쓴 부분이 많아졌다.
'Unity > 작업&삽질노트' 카테고리의 다른 글
2021-08-12 작업일지 (0) | 2021.08.12 |
---|---|
2021-08-09 작업일지 (0) | 2021.08.09 |
2021-08-04 작업일지 (0) | 2021.08.04 |
2021-08-02 작업일지 (0) | 2021.08.02 |
[작업일지] 2019-06-13 (0) | 2019.06.13 |