캐릭터의 카드 유지보수씬을 작업중이다.

이전에 작업해놓은 내용들이 읽기 힘들고 지저분해 코드를 정리하는 작업을 했다.

기존에는 카드 리스트를 위아래로 드래그해 살펴볼 수 있는 기능과, 카드를 드래그해 카드 버리기 영역에 드랍하면 카드가 버려지는 기능이 있었는데, 드래그 기능이 중복되어 리스트 드래그가 방해받는 문제가 있었다. 해당 문제는 카드선택 후 버리기 버튼을 눌러 버리는 형태로 변경해 해결했다.

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

+ Recent posts