게시글
질문&답변
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
질문&답변
2024.11.02
UseInAction에 대해서 질문드립니다.
수강해주셔서 감사합니다.TargetPositions가 null이라는 소리는 Skill의 SearchTargets 함수가 실행되지 않아서 Target 정보가 없거나 SearchAction에서 제대로된 값을 return하지 않아서 Target 정보가 없을 가능성이 큽니다.Skill의 TargetSearcher가 제대로 설정되어있고 Search가 실행되고 있는지 확인해보셔할 것 같습니다.감사합니다.
- 0
- 2
- 28
질문&답변
2024.10.30
Effect만 이용하고 싶습니다.
수강해주셔서 감사합니다.StackActions가 null이라는건 currentData 변수가 제대로 설정되지 않았다는 것으로 Effect.Setup 함수를 사용하여 Level을 제대로 설정하였는지 보셔야할 것 같습니다.Test Folder의 EffectTest.cs를 보시면 Test를 위해서 Effect를 단독으로 사용하고 있기 때문에 해당 Script를 참고 하시면 되실 것 같습니다.감사합니다.
- 0
- 2
- 34
질문&답변
2024.10.18
스킬의 Statemachine에서 변수를 가져오는 방법이 있을까요
수강해주셔서 감사합니다.StateMachine class에void State GetState(int layer) where T : State=> stateDatasByLayer[layer][typeof(T).GetType()].State이 함수를 추가해서 써주시면 StateMachine이 가지고 있는 State를 찾아올 수 있을겁니다.강의와 관련된 질문은 언제든지 하셔도 됩니다. 다만, 강의에서 말씀드렸듯이 이 강의는 클론 코딩 강의가 아니기 때문에 어려움은 있을지언정 전체 구조를 이해하고 스스로 확장할 수 없다면 의미가 없다는걸 꼭 기억해주시길 바라겠습니다. 스스로 확장하실 수 있도록 꼭꼭 추가적인 공부를 하셔야합니다.감사합니다.
- 0
- 2
- 48
질문&답변
2024.10.14
InActionState에 추가하는 변수에 관하여 질문이 있습니다.
수강해주셔서 감사합니다.StateMachine Script 149번줄 AddState 함수를 보시면,156번 줄에서 State를 Setup한 뒤 162번 줄에서 stateDatasByLayer에 Layer 0번 List를 만들기 때문에 Setup 함수에서 GetCurrentStateType 함수를 실행하면 아직 0번 Layer가 안만들어진 상태라 Error가 나게 됩니다.올려주신 Error를 보면 Skill에서 GetCurrentStateType을 실행하는걸 볼 수 있구요, 156번 줄의 Setup 부분을 if 문 아래로 옮겨주시면 문제가 해결될겁니다.감사합니다.
- 0
- 1
- 61
질문&답변
2024.10.12
스킬 사용에 관한 질문이 있습니다.
수강해주셔서 감사합니다.Skill은 SkillSlot class에서 할당된 Button(1~9)를 누르면// SkillSlot.cs 75번 줄private void UpdateInput(){ if (skill.IsUseable && Input.GetKeyDown(useKeyCode)) { skill.Owner.SkillSystem.CancelTargetSearching(); skill.Use(); }}위 함수가 실행되어 SkillSlot이 가지고 있는 Skill을 사용하게 됩니다.SkillSlot이 가지고 있는 Skill은 SkillSystem에 등록된 Skill이기 때문에 따로 찾을 필요가 없어서SkillSystem을 거치지 않고 가지고 있는 Skill의 Use 함수를 직접 호출합니다.감사합니다.
- 0
- 2
- 44