public float shootCoolTime;
public float upgradeShootCoolTimeValue;
public void ChangeUpgradeShootCoolTimeValue(float amount)
{
upgradeShootCoolTimeValue = Mathf.Clamp(upgradeShootCoolTimeValue - amount, 0.3f, 1f);
}
public float UpgradeShootCoolTime()
{
float changed = shootCoolTime * upgradeShootCoolTimeValue;
return changed;
}
public void InitPlayerStat()
{
playerMoveSpeed = 5f;
shootCoolTime = 0.4f;
shootDamage = 5f;
upgradeShootCoolTimeValue = 1f;
}
PlayerShooting 클래스에서 발사를 관리하고 있는데 여기서 shootCoolTime을 캐싱해서 사용했지만, upgradeShootCoolTimeValue는 SO에 작성된 메서드로 직접 바꾸고 있었다. 이때 upgrade~Value도 캐싱해서 사용하면 나중에 PlayerSO의 값을 불필요하게 초기화하지 않아도 된다.
다만, SO 데이터를 직접 건드려서 사용하는 경우는 SO의 변수를 여러 클래스에서 필요로 할 때 접근이 편하다는 장점이 있다.
Interface 말고 추상클래스로 구현해보기
아이템이나 장애물의 경우 생각보다 데이터나 메서드, UI 등에서 공통점이 많아서 추상클래스를 사용하여 관리해보는 것도 괜찮았을 것 같다.
interface ICollisionHandler를 더 작은 단위로 적절하게 분리해서 사용하기
여러 곳에서 사용한 interface인데 어떤 클래스에서는 interface에서 선언된 메서드 중에서 필요하지 않은 메서드도 있었기 때문에 좀 더 작게 나눠 사용했으면 불필요한 메서드 호출을 막을 수 있었을 것 같다.