Developer G
@developerg
수강생
1,095
수강평
74
강의 평점
4.8
안녕하세요, 게임을 사랑하고 개발을 사랑하는 게임 프로그래머 Developer G입니다.
저는 어떻게하면 깔끔하고 체계적인 코드를 작성할 수 있을지 항상 고민하는데요,
제 고민의 결과물들을 여러분들에게 아낌없이 가르쳐드리겠습니다!
강의
로드맵
전체 1수강평
- [유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
- [유니티 레벨 업!] 모듈식으로 개발하는 아이템 시스템
- [유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
- [유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
게시글
질문&답변
Stat의 MaxValue에 관하여 질문이 있습니다.
수강해주셔서 감사합니다.강의에서는 MaxValue를 최대 HP로 가정한게 맞습니다.다만, MaxHP, HP 이렇게 2개의 Stat을 만들고 HP의 MaxValue를 MaxHP Stat으로 설정할 수 있게 만드는게 확장성 좋습니다. (Stat에 MaxStat을 설정하면 MaxValue가 MaxStat의 Value 값을 반환하게 Stat 클래스 확장 필요)감사합니다.
- 0
- 1
- 11
질문&답변
Stat vs StatScaleFloat
질문 내용을 정정해주셔서 감사합니다. 이제 정확히 어떤 부분을 고민하시는지 알겠습니다. 현재 강의에서 다룬 Stat 클래스는 BonusValue(덧셈)만 처리하도록 되어 있어서, 질문하신 것처럼 "최종 수치를 퍼센트로 뻥튀기"하는 기능은 추가적인 구현이 필요합니다. 핵심은 BonusScale(배율) 개념을 도입하는 것입니다. 기존 Stat 클래스에 BonusValue처럼 배율을 관리하는 변수(BonusScale)를 추가하고, 최종 값을 계산하는 공식을 수정해야 합니다. public class Stat : IdentifiedObject { // [추가] 배율 보너스의 총합 (예: 10% 증가면 0.1) private float bonusScale; // [추가] 배율 보너스를 저장할 딕셔너리 (키 관리용) private Dictionary bonusScalesByKey = new Dictionary(); // [중요] 최종 값 계산 공식 수정 // 기존: (기본값 + 보너스값) // 수정: (기본값 + 보너스값) * (1 + 배율보너스) public float Value { get { float totalValue = (defaultValue + bonusValue) * (1f + bonusScale); return Mathf.Clamp(totalValue, minValue, maxValue); } } // [추가] 배율을 설정하는 함수 (SetBonusValue와 비슷한 구조) public void SetBonusScale(string key, float scale) { // 기존에 등록된 키라면 먼저 뺍니다 (갱신 로직) if (bonusScalesByKey.ContainsKey(key)) bonusScale -= bonusScalesByKey[key]; bonusScalesByKey[key] = scale; bonusScale += scale; // (값이 변했으니 이벤트 호출하는 로직 등은 기존과 동일하게 처리) } } 이제 SetBonusScale이라는 무기가 생겼으니, 라바돈의 죽음모자는 이렇게 구현하면 됩니다. public void EquipRabadon(Entity player) { Stat apStat = player.Stats.GetStat("AbilityPower"); // 1. 주문력 +120 (깡수치 증가) -> 기존 기능 apStat.SetBonusValue("Rabadon_Flat", 120f); // 2. 주문력 35% 증가 (퍼센트 증가) -> 추가한 기능 // 35% 증가는 0.35를 더해주는 것과 같습니다. // 공식: (기본 + 120) * (1 + 0.35) = 1.35배 뻥튀기 apStat.SetBonusScale("Rabadon_Scale", 0.35f); } 만약 캐릭터의 기본 주문력이 100이라고 가정해 봅시다.SetBonusValue로 120이 더해집니다. -> 합계 220SetBonusScale로 0.35(35%)가 적용됩니다. -> 배율 1.35최종 계산: 220 * 1.35 = 297이렇게 BonusScale 변수를 하나 추가하고 Value 계산 식에 곱하기 연산을 추가해 주시면, 롤이나 다른 RPG 게임에 나오는 다양한 퍼센트 증가 옵션을 아주 쉽게 구현하실 수 있습니다. 해당 내용은 혹시 ItemSystem 강의를 구매하셨다면 해당 강의에 더 자세히 나와있습니다.감사합니다.
- 0
- 4
- 41
질문&답변
Stat vs StatScaleFloat
수강해주셔서 감사합니다.정확히 질문이 무엇인지 파악하지 못하여 여러 답변을 드립니다.질문하신 "Bonus Value를 부여하고 싶을 때"는 StatScaleFloat을 건드리는 게 아니라, 원본 Stat 자체에 값을 더해주시면 됩니다. // 1. 게임 로직에서 원본 Stat에 보너스를 부여합니다. // (예: 버프를 받아서 공격력이 50 증가함) attackStat.SetBonusValue("Buff_PowerUp", 50f); // 2. StatScaleFloat을 사용하는 스킬 데미지 계산 부분 // 수강생분께서 별도로 코드를 수정하지 않아도, // scaleStat이 참조하는 attackStat의 값이 이미 50 늘어났기 때문에 // 최종 데미지는 자동으로 증가해서 계산됩니다. float finalDamage = skillDamageStatScale.Value; StatScaleFloat은 Inspector에서 미리 세팅해두는 '공식'이라면, Bonus Value는 게임 도중에 수시로 변하는 값을 처리하기 위해 존재합니다. 저 같은 경우 보통 아이템 장착이나 버프 스킬을 구현할 때 다음과 같이 코드를 작성합니다.public class EquipmentItem : MonoBehaviour { [SerializeField] private float bonusAttack = 10f; // 아이템을 장착했을 때 호출 public void Equip(Entity owner) { // 1. 플레이어의 스탯 중 '공격력'을 찾아옵니다. var attackStat = owner.GetStat("Attack"); // 2. 원본 스탯에 Bonus Value를 부여합니다. // "Sword"라는 키값을 줘서 나중에 이 값만 뺄 수 있게 합니다. if (attackStat != null) attackStat.SetBonusValue("Sword", bonusAttack); } // 아이템을 해제했을 때 호출 public void Unequip(Entity owner) { var attackStat = owner.GetStat("Attack"); // 3. 부여했던 보너스 수치를 제거합니다. if (attackStat != null) attackStat.RemoveBonusValue("Sword"); } } Scale처럼 Inspector에서 BonusValue를 주고 싶으신거라면 StatScaleFloat을 확장해서 [Calculation Mode] 같은 옵션을 추가해 사용하면 됩니다. public enum CalculationMode { Fixed, // 고정값 (Bonus Value 개념) Scaled // 스탯 비례 (기본값 + 스탯 보정) } [Serializable] public struct AdaptiveFloat { public CalculationMode mode; // 1. 기본값 (고정 데미지 or 기본 수치) // Fixed 모드일 때는 이 값 자체가 최종값이 됨 public float defaultValue; // 2. 비례할 스탯 (Scaled 모드용) public Stat scaleStat; // 3. 비례 계수 (Scaled 모드용) // 예: 0.5f면 스탯의 50%만큼 추가, 1.0f면 100% 추가 public float scaleRatio; public float Value { get { float statValue = scaleStat != null ? scaleStat.Value : 0f; // [Fixed 모드] : 계수 없이 정직하게 합산 // 공식: 기본데미지 + 힘 if (mode == CalculationMode.Fixed) return defaultValue + statValue; // [Scaled 모드] : 계수(Ratio)를 곱해서 합산 // 공식: 기본데미지 + (힘 * 0.5) return defaultValue + (statValue * scaleRatio); } } } 혹시나 질문하신게 다른 것이였다면 다시 질문해주시면 대답 드리겠습니다.감사합니다.
- 0
- 4
- 41
질문&답변
애니매이션 버그가 있는것 같습니다.
수강해주셔서 감사합니다.해당 문제는 유니티 NavAgent를 쓰다보니 생기는 문제로 마우스 클릭을 막 하거나 Player Entity가 Enemy Entity에 부딪치고하다보면 그런 문제가 생길 수 있습니다. 강의에서 캐릭터 컨트롤러는 중요하지 않기 때문에 간단한 형태로 만들어서 그렇습니다.감사합니다.
- 0
- 2
- 40
질문&답변
StatsOverride질문이 있습니다.
수강해주셔서 감사합니다.맞습니다. 만약 StatOverride가 없다면, 체력이 다른 캐릭터를 만들 때마다 새로운 STAT_HP_Warrior, STAT_HP_Mage 같은 Stat을 계속 만들어야 해서 관리가 힘들어지겠죠? HpStat 슬롯은 이 캐릭터가 '어떤 스탯'을 사용하는지 정의하는 용도이고, 아래 Overrides는 그 스탯의 '구체적인 수치'를 이 캐릭터에 맞게 튜닝하는 용도라고 이해하시면 됩니다. Warriror는 200, Mage는 100식으로요.감사합니다.
- 0
- 2
- 33
질문&답변
SetBonusValue함수 질문있습니다.
수강해주셔서 감사합니다.예를 들어, 이미 적용 중인 '공격력 10 증가 효과'를 20으로 바꾼다고 생각해 보세요. 단순히 20을 더하기만 하면 총합은 30(현재 10 + 증가된 효과 20)이 되어버리겠죠? 그래서 기존에 더해져 있던 10을 먼저 빼서 0으로 만든 뒤, 새로운 20을 더해줘야 정확히 20만 반영됩니다. Line 92의 코드는 바로 그 '기존 값을 취소하는 과정'이라고 이해하면 됩니다.감사합니다.
- 0
- 2
- 25
질문&답변
오늘 수강시작한 취준생입니다.
수강해주셔서 감사합니다.Scripts 폴더 안에 Category.cs IdentifiedObject.cs를 넣으시면 되구요, CustomEditorUtility는 Editor 코드라 Scripts 폴더 내부에 Editor 폴더를 만드셔서 넣으시면 됩니다.폴더 구성은 강의에서 보실 수도 있고, 강의에서 수업 자료로 제공하는 완성된 프로젝트를 다운 받으셔서 따라하셔도 됩니다.감사합니다.
- 0
- 1
- 33
질문&답변
사소하지만 에디터 관련 질문있습니다
수강해주셔서 감사합니다.해당 문제는 유니티 버전이 바뀌면서 생긴 SubclassSelector의 버그로, 자세히 보시면 Foldout 버튼이 없는게 아니라 글자와 겹쳐있습니다.https://github.com/mackysoft/Unity-SerializeReferenceExtensions/releases해당 링크에서 최신 버전을 다운 받으시면 해결되실 겁니다.감사합니다.
- 0
- 1
- 48
질문&답변
스킬시스템을 데이터 테이블화 하는 법에 대해 감이안잡혀서 질문드립니다.
수강해주셔서 감사합니다.테이블을 어떤 식으로 구성할지는 답이 없습니다.다만, 질문하신 부분이 핵심인데 Flat한 데이터가 아니다보니 가장 먼저 해야할 일은 객체에 있는 데이터들을 모두 수집하여 평탄화 시키는 일입니다.어떻게 평탄화 시킬지는 당연히 개발자의 몫이구요, 저 같은 경우는 객체의 Data를 Json으로 모아서 데이터들을 엮어 평탄화를 시킵니다. 예를 들면 다음과 같습니다.{"player" :{"info": {"name" : "Park"}}}위와 같은 JSON 데이터라면 각 뎁스를 엮어서 player.info.name = Park라고 평탄화할 수 있습니다.player.info.name이 Key, Park이 Value가 되는거죠.제가 아는 분은 따로 정보를 모은 클래스를 만들어서 그걸로 데이터를 주고 받기도 하구요, 처음에 말씀 드렸듯이 답은 없습니다.데이터 테이블을 구성하는 오픈소스들이 많으니 그런 것들을 한번 봐보시면 공부에 도움이 되실 겁니다.실무에서 어떤 부분까지 테이블화 시켜서 처리하는지 궁금하시다고 하셨는데, 팀마다 다르겠지만 요즘은 무점검 패치 같은 것들을 구현하기 위해서 사소한 것들 하나까지도 테이블화 하고 있고, 테이블에 대한 의존성이 낮던 팀들도 그러한 방향으로 가고 있다고 생각하시면 됩니다.감사합니다.
- 0
- 2
- 73
질문&답변
안녕하세요 강좌 진행 순서에 대해 문의드립니다.
수강해주셔서 감사합니다.난이도는 퀘스트 -> 아이템 -> 스킬 순으로 어려워집니다.퀘스트 (기초)아이템 (기본)스킬 (심화)정도라고 생각하시면 됩니다.감사랍니다.
- 0
- 1
- 33





![Thumbnail image of the [유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템](https://cdn.inflearn.com/public/courses/333173/cover/1ebf894e-36b3-4254-b9f7-9c1e0f43e02b/333173.png?w=148)
![Thumbnail image of the [유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템](https://cdn.inflearn.com/public/courses/327970/cover/7e68ea5f-28f1-40ee-af0b-a223bd98d182/327970-eng.png?w=148)