인간 데이터를 받아올 때 Human과 HumanController, 2개의 클래스에서 모두 데이터를 들고 있는 것이 불필요해 보인다는 피드백을 받았다.
변경해서 사용할 데이터도 아니고 한번 받아오고 변수로 저장해 사용하고 있다.
그래서 Awake 순서만 잘 맞춰서 한쪽에서 로드한 데이터를 다른 쪽에서 초기화하는 방식으로 변경했다.
[ 변경 과정 ]
1. Human -> HumanController 로 Awake 순서 조정(컴포넌트 추가 순서 조정, or project setting에서 변경하기)
2. Human의 Awake에서 Data 받아오고 HumanController 연결
3. HumanController의 데이터 세팅
4. HumanController에서 데이터 불러오는 부분 삭제
[ 수정 전 ]
public class Human : MonoBehaviour
{
private DataTable.Human_Data _humanData;
private int _coin; // 놀랐을 때 떨어뜨리고 가는 재화량(처치 시 획득 재화량)
public float MaxFear { get; private set; }
public int LifeInflicted { get; private set; }
public HumanController controller;
private void Awake()
{
// 데이터 세팅
_humanData = DataManager.Instance.GetHumanByIndex(id);
MaxFear = _humanData.maxFear;
_coin = _humanData.coin;
LifeInflicted = _humanData.lifeInflicted;
if (controller == null)
{
controller = gameObject.AddComponent<HumanController>();
}
}
}
public class HumanController : MonoBehaviour
{
private DataTable.Human_Data _humanData;
public int id;
private float _speed;
public float Cooldown { get; private set; }
public float MinFatigueInflicted { get; private set; }
public float MaxFatigueInflicted { get; private set; }
private void Awake()
{
// 데이터 세팅
_humanData = DataManager.Instance.GetHumanByIndex(id);
_speed = _humanData.speed;
Cooldown = _humanData.cooldown;
MinFatigueInflicted = _humanData.minFatigueInflicted;
MaxFatigueInflicted = _humanData.maxFatigueInflicted;
}
}
[ 수정 후 ]
public class Human : MonoBehaviour
{
private Human_Data _humanData;
public int id;
private int _coin; // 놀랐을 때 떨어뜨리고 가는 재화량(처치 시 획득 재화량)
public float MaxFear { get; private set; }
public int LifeInflicted { get; private set; }
public HumanController controller;
private void Awake()
{
// 데이터 세팅
_humanData = DataManager.Instance.GetHumanByIndex(id);
MaxFear = _humanData.maxFear;
_coin = _humanData.coin;
LifeInflicted = _humanData.lifeInflicted;
if (controller == null)
{
controller = gameObject.AddComponent<HumanController>();
}
controller.SetHumanData(_humanData); // 컨트롤러에서 사용하는 데이터 세팅
}
}
public class HumanController : MonoBehaviour
{
private float _speed;
public float Cooldown { get; private set; }
public float MinFatigueInflicted { get; private set; }
public float MaxFatigueInflicted { get; private set; }
public void SetHumanData(Human_Data humanData)
{
_speed = humanData.speed;
Cooldown = humanData.cooldown;
MinFatigueInflicted = humanData.minFatigueInflicted;
MaxFatigueInflicted = humanData.maxFatigueInflicted;
}
}'내일배움캠프 > TIL' 카테고리의 다른 글
| [내배캠][Unity6기][TIL] ObjectDisposedException 트러블슈팅 (0) | 2025.01.06 |
|---|---|
| [내배캠][Unity6기][TIL] 힐러 타입 인간 추가 (0) | 2025.01.03 |
| [내배캠][Unity6기][TIL] 데이터 로드 리팩토링 (0) | 2024.12.30 |
| [내배캠][Unity6기][TIL] 동적 생성 메서드 경로 설정 리팩토링 (0) | 2024.12.27 |
| [내배캠][Unity6기][TIL] 게임 로직 리팩토링 (0) | 2024.12.26 |