기존에 일렬로 SPUM 캐릭터를 생성하는 방식에서, 아치형으로 캐릭터를 배치하는 방식을 요청받았다.
따라서 아래와 같이 코드를 수정했다.
private void UIUpdate()
{
if (_manager != null)
{
_status = _manager.GetCurrentPresetData(_index);
}
if (_manager == null || _status == null || _status.Data == null)
{
if (_obj != null)
{
Manager.Pool.Release(_obj);
_obj = null;
}
if(_index == 0)
{
_crownImage.SetActive(false);
}
}
else
{
if (_status.Data != null)
{
if(_index == 0)
{
_crownImage.SetActive(true);
}
if (_obj == null)
{
switch(_index)
{
case 0:
_obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(-0.5f, -0.3f, 0), Quaternion.Euler(0f, 0f, 0f));
break;
case 1:
_obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(0.6f, 1f, 0), Quaternion.Euler(0f, 0f, 0f));
break;
case 2:
_obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(2.1f, 1.6f, 0), Quaternion.Euler(0f, 180f, 0f));
break;
case 3:
_obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(3.7f, 0.8f, 0), Quaternion.Euler(0f, 180f, 0f));
break;
case 4:
_obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(5f, -0.4f, 0), Quaternion.Euler(0f, 180f, 0f));
break;
default:
break;
}
}
}
}
}
캐릭터의 보는 방향을 왼쪽 두 캐릭터는 오른쪽 방향, 나머지 캐릭터는 왼쪽 방향으로 바라보도록 설정하였다.
해당 방식은 다음과 같다.
[System.Serializable]
public class UnitDataDTO
{
public int ClassSynergy;
public int Cost;
public string Description;
public Grade Grade;
public int ID;
public string Name;
public int PrefferedLine;
public int Synergy;
public UnitStats[] UnitStats;
}
이와 같이 클래스를 만든 후, 해당 클래스를 반환하는 함수를 UnitData에 넣는다.
public UnitDataDTO ToDTO(UnitData data)
{
return new UnitDataDTO
{
ClassSynergy = (int)data.ClassSynergy,
Cost = data.Cost,
Description = data.Description,
Grade = data.Grade,
ID = data.ID,
Name = data.name,
PrefferedLine = data.PerferredLine,
Synergy = (int)data.Synergy,
UnitStats = data.UnitStats
};
}
다음으로 해당 데이터를 Init하는 함수를 만들어 이를 로비 씬이 로딩 될 때 실행되도록 한다.
public async UniTask InitializeCharacterData()
{
var initRef = FirebaseManager.DataReference.Child("InitCharacterData");
foreach (var charData in Manager.Data.UnitDataDic.Values)
{
UnitDataDTO dto = charData.ToDTO(charData);
await initRef.Child(charData.Name).
SetRawJsonValueAsync(JsonUtility.ToJson(dto));
}
}
해당 부분의 경우 현재 제대로 실행되고 있지 않아 강사님께 찾아가서 여쭤볼 예정이다.