아직까지는 기획안이 구체적으로 나오지 않은 것도 있었고, 개인 일정 때문에 작업한 내용 자체는 많지 않았다.
기존에는 한 슬롯만 편성이 가능했지만, 이제는 여러 슬롯의 편성을 진행해야 하며 해당 데이터를 저장해 둬야 하기 때문에, 선택 슬롯에 대해 클래스를 별도로 만들었다.
[Serializable]
public class SelectedCharacters
{
public CharacterSO[] CharLists;
public SelectedCharacters(int size)
{
CharLists = new CharacterSO[size];
}
}
이제는 이걸 초기화해주고 프리셋 설정을 바꿀 수 있도록 변경해주어야 한다.
// 초기화
private void Awake()
{
for (int i = 0; i < 3; i++)
{
_selectedCharacters.Add(new SelectedCharacters(5));
}
_currentCharacterSOs = _selectedCharacters[0].CharLists;
}
// 변경 기능 구현
public void SelectCharacterPreset(int index)
{
_currentCharacterSOs = _selectedCharacters[index].CharLists;
_currentCost = 0;
_currentOverallPower = 0;
for(int i = 0; i < _currentCharacterSOs.Length; i++)
{
if (_currentCharacterSOs[i] != null)
{
_currentCost += _currentCharacterSOs[i].Cost;
_currentOverallPower += _currentCharacterSOs[i].OverallPower;
}
}
OnCharacterDataChanged?.Invoke();
}
여기서 한 가지 유의해야 할 점이 있는데, OnEnable과 충돌할 가능성에 대해 염두에 두고 있어야 한다는 점이다.
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class SelectedCharacterUnit : MonoBehaviour
{
[Header("Index")]
[SerializeField] private int _index;
[Header("UI")]
[SerializeField] private TMP_Text _charText;
[SerializeField] private TMP_Text _costText;
[SerializeField] private TMP_Text _jobSynergyText;
[SerializeField] private TMP_Text _roleSynergyText;
[SerializeField] private TMP_Text _overallPowerText;
private CharacterSO _charData;
private TeamOrganizeManager _manager;
private void Awake()
{
_manager = GetComponentInParent<TeamOrganizeManager>();
GetComponent<Button>().onClick.AddListener(TryDeleteCharacter);
}
private void OnEnable()
{
_manager.OnCharacterDataChanged += UIUpdate;
UIUpdate();
}
private void OnDisable()
{
_manager.OnCharacterDataChanged -= UIUpdate;
}
...
private void UIUpdate()
{
_charData = _manager.GetCurrentCharacterData(_index);
if(_manager == null || _charData == null)
{
_charText.text = "";
_costText.text = "";
_jobSynergyText.text = "";
_roleSynergyText.text = "";
_overallPowerText.text = "";
}
else
{
_charText.text = $"{_charData.name}";
_costText.text = $"{_charData.Cost}";
_jobSynergyText.text = $"{_charData.CharacterSynergy.JobSynergy}";
_roleSynergyText.text = $"{_charData.CharacterSynergy.RoleSynergy}";
_overallPowerText.text = $"{_charData.OverallPower}";
}
}
}
처음에는 이와 같이 되어 있었지만, OnEnable에서 UIUpdate를 호출할 경우 캐릭터 데이터 슬롯을 생성하기도 전에 받아와서 인덱스 오버 에러가 뜨는 것을 확인했다. 따라서 이를 Start문에서 선언해야지 문제를 해결할 수 있다.
업무에 대한 추가적인 분배에 관해 전달받았다. 우선 필요한 씬이 로그인 씬, 로비 씬, 전투 씬, 가챠 씬 이 정도로 나뉠 수 있는데, 각각의 씬 자체를 한 사람에게 분담하기로 한 것이다. 이에 따라 내가 맡게 된 씬은 로비 씬이 되었고, 로비 씬의 구체적인 도안 같은 것이 정해지면 직접적으로 작업을 시작하게 될 것이다.
다만 씬 작업도 당장은 할 수 없는 일인지라, 다음으로 해야 할 일은 리더 시스템에 대해 틀을 잡는 것이다.