Spector
수강생수
183
수강평수
9
강의평점
4.6
경력
前 넷마블 서버 프로그래머
前 위메이드 클라이언트 프로그래머
前 넥슨 게임 프로그래머
관심분야
게임개발과 관련된 기술 연구
인디게임 개발
소개
안녕하세요. 저는 게임개발과 관련된 재미있는 연구를 즐기는 개발자입니다.
어린 시절부터 게임을 좋아했고, 게임개발자로서 국내 주요 게임기업에서 근무하며 크고 작은 프로젝트에 참여했습니다. 현재는 인디게임 개발자로 활동하고 있으며, 제가 쌓아온 지식과 경험을 여러분과 나누고자 합니다.
강의
수강평
- 실전! 언리얼 소울라이크 개발: A to Z
- 실전! 언리얼 소울라이크 개발: A to Z
- 실전! 언리얼 소울라이크 개발: A to Z
- 실전! 언리얼 소울라이크 개발: A to Z
게시글
질문&답변
각 섹셕별로 수업 자료가 제공된다고 했는데 어디에서 받을 수 있는지 모르겠습니다.
안녕하세요.수업 자료로 제공되는 프로젝트 파일은 강의 영상 시청 화면의 오른쪽 상단의 커리큘럼을 클릭하시면 다운로드 받을 수 있는 버튼이 있습니다.이 버튼을 클릭해서 다운로드 받으실 수 있습니다. 그럼 좋은 하루 되세요~(사진) (사진)
- 0
- 2
- 8
질문&답변
프로젝트 생성 및 설정 첫 강의를 보면서 들었던 궁금한 점
안녕하세요! 답변을 드릴려고 와보니 AI 인턴이 적절한 답변을 해줬네요^^ 우선 C++ 클래스를 BP 클래스로 만들어서 사용하는 이유는 에디터에서 기능을 확장하거나 수정하는 작업이 용이하기 때문입니다. 개발 중에 여러 가지 테스트를 해보거나 유지 보수하기가 편리합니다.에디터의 World Settings나 여타 블루프린트 클래스에서 다른 클래스를 등록해서 사용하는 경우, C++ 클래스를 직접 사용하는 경우는 드뭅니다.이유는 앞서 설명드린 내용 때문입니다. C++ 클래스를 직접 등록하게 되면 등록만 할 수 있을 뿐, 수정이나 확장 등은 에디터에서 불가능합니다.그럼 이런 의문이 들 수 있습니다. "처음부터 블루프린트 클래스로 만들면 되지, 뭐하러 귀찮게 C++ 클래스를 만들어서 또다시 블루프린트 클래스를 만드는 걸까?"라고 생각하실 수 있는데요,똑같은 로직을 블루프린트 클래스로 만들었을 때 약 10배 정도 느립니다. 이 때문에 복잡한 계산이나 로직은 C++ 클래스로 만들고, 이것을 확장해서 블루프린트 클래스로 만들면 성능과 편의성을 동시에 가져갈 수 있습니다.마지막으로 C++ 클래스를 상속받아 만든 블루프린트 클래스는 C++ 클래스의 자식 클래스 개념으로 이해하시면 됩니다. 그럼 좋은 하루 되세요.
- 0
- 2
- 31
질문&답변
안녕하세요. 입문자입니다.
안녕하세요 김태윤님!우선 강의에 사용한 IDE는 2강에서 Rider를 잠시 사용했었고, 이후 강의에서는 모두 비주얼 스튜디오를 사용하고 있습니다.비주얼 스튜디오는 순정 상태는 아니고, ReSharper C++ 라는 extension을 사용하고 있습니다.현재 시점에서 추천을 드리자면, 꼭 비주얼 스튜디오를 사용하셔야 하는 상황이 아니라면 Rider를 추천 드립니다. 무료이고 언리얼 엔진을 사용하는데 있어서 여러가지 편리한 기능들을 제공합니다.비주얼 스튜디오를 사용하신다면, 순정 상태로 쓰셔도 전혀 문제가 되지는 않지만 좀 더 편리한 여러가지 기능들을 사용하고 싶으시다면 현재 저도 사용하고 있는 ReSharper C++를 추천 드립니다.끝으로 강의 업데이트 일정은 아직 확정되지 않았으나, 최신 트렌드를 반영하는 방향으로 긍정적으로 검토하고 있습니다. 감사합니다!
- 0
- 1
- 23
질문&답변
폴암 무기 집을때 크러쉬
안녕하세요, 질문 해주신 내용만으로는 원인을 알기가 어렵습니다.참고로 말씀드리면, 크래시가 발생할 때 노출되는 Stack Trace 로그를 보시면 힌트가 될만한 부분이 있을 겁니다.이 내용을 참고하셔서 null값이 참조되는 위치를 찾아 보시거나 제공되는 샘플 프로젝트의 내용과 비교해 보시면서 차근차근 찾아 보시는 것을 추천 드립니다. 그럼 좋은 하루되세요^^
- 0
- 2
- 35
질문&답변
GAS 관련
안녕하세요. GAS는 AI를 구현하는 용도가 아니라, 이름에서 알 수 있듯이 스킬이나 능력치를 효과적으로 구현하기 위해 개발된 별도의 프레임워크입니다.GAS를 포트폴리오 제작에 활용한다면 매력적인 포트폴리오를 만들 수 있을 것 같습니다.다만, GAS 자체의 러닝 커브가 굉장히 가파릅니다. 언리얼 엔진 안의 또 다른 엔진을 배운다는 생각으로 도전해야 합니다. 핵심을 파고들어 포트폴리오에 적용해야 비로서 포트폴리오의 가치를 높일 수 있습니다. 수박 겉핥기 식으로 적용한다면 오히려 역효과가 날 수도 있기 때문에 이런 점은 충분히 고민해 보시기 바랍니다. 그럼 좋은 하루 되세요^^
- 0
- 1
- 40
질문&답변
카메라를 적에게 고정시키는 로직 부분
안녕하세요~답변 드리려고 들어와 보니 AI 인턴이 정확한 답변을 했네요^^타겟의 높이를 조절하는 방식이기 때문에 마이너스가 맞습니다.그럼 좋은 하루 되세요~
- 0
- 2
- 39
질문&답변
Tick 컴포넌트에서 락온 함수
안녕하세요~Timer 함수는 프레임과 상관없이 일정 주기로 실행되는 로직에 적합합니다.예를 들어 1초마다 체력이 회복되거나 감소하는 로직이나, 0.5초마다 스킬 쿨타임을 체크하는 등의 경우를 들 수 있습니다.반면 LockOn 같은 기능은 매 프레임 즉각적으로 반응해야 하는 로직이기 때문에, Timer 함수로 구현하는 것은 적합하지 않습니다.
- 0
- 2
- 35
질문&답변
강의 자료
2강. 입력 시스템과 캐릭터 이동 강의 수업 노트에 올려 두었습니다.좋은 하루 되세요!
- 0
- 3
- 56
질문&답변
강의 자료
안녕하세요. 칼엘_S님강의에 사용한 노션 자료는 정리해서 올려 드리도록 하겠습니다.그럼 좋은 하루 되세요^^ 감사합니다!
- 0
- 3
- 56
질문&답변
방어구 시스템 구현 질문
안녕하세요!첨부해주신 스크린샷을 보고 설명드리면, 해당 코드는 ArmourMap에서 같은 부위의 방어구가 있는지 확인합니다.있을 경우:PickupItem으로 만들어서 바닥에 떨어뜨리고, ArmourMap의 해당 key(슬롯)에 있는 방어구를 NewArmour로 교체합니다없을 경우:ArmourMap에 해당 방어구 타입에 대한 key/value가 존재하지 않기 때문에 ArmourMap.Add(ArmourType, NewArmour)로 새로운 key을 생성하여 NewArmour를 할당합니다질문해주신 내용을 쉽게 설명드리자면, 기존에 같은 슬롯에 다른 방어구가 있는 상황에서 굳이 슬롯을 삭제했다가 다시 생성해서 NewArmour를 복사할 필요는 없습니다.이미 존재하는 슬롯의 값만 변경하는 것(ArmourMap[ArmourType] = NewArmour)이 Remove() 후 Add()를 사용하는 것보다 성능상 더 효율적입니다. void UDS1CombatComponent::SetArmour(ADS1Armour* NewArmour) { const EDS1ArmourType ArmourType = NewArmour->GetArmourType(); // 이미 같은 부위에 장착된 방어구가 있으면 PickupItem으로 떨군다. if (ADS1Armour* EquippedArmourPart = GetArmour(ArmourType)) { if (IsValid(EquippedArmourPart)) { ... // 픽업 아이템 생성 } ArmourMap[ArmourType] = NewArmour; } else { ArmourMap.Add(ArmourType, NewArmour); } }그리고 if (ADS1Armour* EquippedArmourPart = GetArmour(ArmourType)) 구문에 의해서 해당 방어구타입에 대한 key(슬롯)가 존재한다는 것이 보장되기 때문에ArmourMap[ArmourType] = NewArmour 구문은 안전합니다. 그럼 좋은 하루 되세요~
- 0
- 3
- 58




