소개
안녕하세요, 게임을 사랑하고 개발을 사랑하는 게임 프로그래머 Developer G입니다.
저는 어떻게하면 깔끔하고 체계적인 코드를 작성할 수 있을지 항상 고민하는데요,
제 고민의 결과물들을 여러분들에게 아낌없이 가르쳐드리겠습니다!
강의
전체 2수강평
- [유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
- [유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
- [유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
게시글
질문&답변
2024.11.20
Dead 애니메이션 출력 오류입니다.
수강해주셔서 감사합니다. Transition Setting을 보시면 CanTransitionToSelf Option이 켜져있는데, 이러면 isDead가 true일 때 Dead Animation이 무한히 재실행되게 됩니다. 해당 Option을 꺼주시면 해결이 될 것 같습니다.다만, 이미지만으로는 정확한 문제를 판단하기 힘들기 때문에 위 방법으로 해결이 안되신다면 수업 자료로 첨부된 완성된 프로젝트를 여셔서 Animator 설정을 비교해보시는게 빠른 해결에 도움이되실 것 같습니다. 추가적인 도움이 필요하시거나 질문이 있으시면 언제든지 글을 써주세요. 감사합니다.
- 0
- 3
- 13
질문&답변
2024.11.19
커스텀 에디터에 관하여 질문이 있습니다.
수강해주셔서 감사합니다.따로 작업해주실건 없구요, 게임 플레이시에 enum 값이 안바뀐다는 얘기시면 Quest의 Clone 함수에서 new TaskGroup을 만들 때 enum 값도 복사하시는지 확인해보셔야할 것 같습니다.public Quest Clone(){var clone = Instantiate(this);clone.taskGroups = taskGroups.Select(x => new TaskGroup(x)).ToArray();return clone;}감사합니다.
- 0
- 2
- 22
질문&답변
2024.11.18
스킬 구현 질문입니다
수강해주셔서 감사합니다. 말씀하신 방식대로 진행을 하셔도 되구요, Effect의 duration을 0(=무한)으로 설정하고 종료 Option을 DurationEnded로 설정하면 무한히 적용되니, Buff를 준 영웅이 죽었을 때 다른 Entity들에 적용된 Buff를 삭제할 방법만 마련하시면 이 방법을 쓰셔도 됩니다. 삭제 방법으로는 Effect 자체에 종료 조건을 Module로 만들어서 Effect Owner Skill의 Owner Entity가 죽으면 끝나게하거나 영웅이 죽을 때 다른 Entity들을 조사해서 영웅이 준 Buff를 삭제하는 식 등이 있습니다. 답은 없으니 낫다고 생각되는 방향으로 진행하시면 됩니다. 감사합니다.
- 0
- 2
- 24
질문&답변
2024.11.17
파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.
수강해주셔서 감사합니다.Json을 이용하면 추후에 BaaS Service와 연동하여 서버에 Data를 저장할 경우, 그 외 서버와의 통신이 필요할 경우 Json Data를 서버로 보내기만 하면 되기 때문에 서버 작업에 용이합니다.Playerprefs가 아닌 File 형태로 저장할 경우 저장 Data의 변조가 매우 쉬워지기 때문에 큰 차이가 없긴 하지만 조금이나마 변조가 귀찮으라고 Playerprefs를 이용해 저장하는거구요, 유료로 판매하는 게임에서는 File 형태로 저장해도 무방합니다. Playerprefs에 저장된 Data를 보고 싶으시다면 Playerprefs에 저장된 값들을 Unity Window 창으로 볼 수 있게 해주는 에셋들이 많이 있습니다. 말씀하신 아이디어는 굳이 새로운 class를 만들지 않고 그냥 Quest와 TaskGroup 자체에 생각하신 아이디어를 적용해서 확장하시면 될거 같구요, 웬만하면 상속보다는 먼저 확장(or 모듈화)을 고려해서 설계를 하시는게 좋습니다. Complete시에 TaskGroup들의 성공 여부에 따라 Quest의 성공 단계가 결정되고(=대성공, 성공, 실패, 대실패) Reward에서 성공 단계에 따라 차등 보상을 주는 아이디어는 좋아보입니다.상속은 엄청난 리스크를 동반하는 행위구요, 기능 몇 개가 추가된다고 상속으로 자식 class를 만들어버리면 나중에 여기저기 중복 Code가 생기면서 Code가 꼬일 가능성이 높습니다. Achievement class 가 약간 오해를 드린 것 같은데요, 강의에서 Quest를 상속 받는 Achievement를 만든건 Quest와 업적이 보편적으로 역활이 나눠지기 때문에 편의성을 위해 나눈 것이지 Achievement class 자체는 없어도 상관이 없습니다.만약 제가 Quest의 기능을 더 확장한다고하면 Quest 자체를 확장하고, Quest class가 너무 커진다 싶으면 정리를 해서 더 세심하게 모듈화를 하지 웬만하면 Quest를 상속 받는 무언가를 만들 일은 없을 것 같습니다.감사합니다.
- 0
- 1
- 26
질문&답변
2024.11.04
Selct에 대해서 질문드립니다.
수강해주셔서 감사합니다.방법은 여러 가지겠지만 여기선 Button에 집중을 해보겠습니다.Button에 3가지 Input Type을 만들고(Click, Down, Up)3가지 상태에 따라 Skill을 다르게 실행시키면 될겁니다.// InputButton.cs if ((InputType.Click && Input.GetKeyUp(keyCode)) || InputType.Down && Input.GetKeyDown(keyCode)) skill.Use(); else if (InputType.Up) { if (Input.GetKeyDown(keyCode) skill.ShowIndicator(); else if (Input.GetKeyUp(keyCode)) { skill.HideIndicator(); skill.UseImmediately(마우스 위치에서 Ray를 쏴 맞은 위치); } }Code를 적당히 짜보면 위와 같은 형태가 될겁니다. 실제론 훨씬 구조적으로 만들어야겠죠.Button이 Click이나 Down Type이라면 Use 함수를 통해 TargetSearcher의 비동기 동작에 맡기고,Up이라면 Key를 눌렀을 때 Indicator로 범위를 보여주고, Key를 뗄 때 UseImmediately 함수로 Skill을 바로 동작시키는 겁니다.제 기억이 맞다면 롤은 Key를 떼기 전에 Mouse 우클릭을 하면 스킬 발동이 취소되어 Key를 떼도 스킬이 발동하지 않는 것으로 알고 있는데, bool형 변수 같은걸 만들어서 Mouse 동작과 연동해 제어하면 될겁니다.이는 제 의견을 물으셔서 하나 말씀드린 것 뿐이지 수강생분이 생각하시는 구현이 틀렸다고 말씀드리는게 아닙니다. 이 방식이 나을지 수강생분이 생각하시는 방식이 나을지는 모르는 일입니다. 다만 개인적인 생각으로 Skill 자체보다는 Button를 통해 범용적인 형태로 Smart Key을 구현할 수 있다면 Skill뿐만 아니라 Item이나 여러 Object와의 Interaction에서도 Smart Key를 활용할 수 있겠죠.감사합니다.
- 0
- 2
- 50