주요 경력
現 2014 ~ 2015, 2022 ~ 호서대학교 게임학과 초빙교수
現 2016 ~ 공주대학교 게임디자인학과 강의전담교수
現 2022 ~ 유니티 공식 인증 강사 (Unity Certified Instructor)
前 2023 포항공과대학교 전자전기공학과 외래교수
前 2022 우송대학교 테크노미디어융합학부 (게임멀티미디어전공) 외래교수
前 2019 공주대학교 컴퓨터공학부 외래교수
前 2018 상명대학교 사진영상콘텐츠학과 외래교수
前 2017 계원예술대학교 게임미디어과 외래교수
前 2016, 2020~2021 배재대학교 게임학과 외래교수
前 2016남서울대학교 VRAR 외래교수
前 2016 한국영상대학교 게임애니메이션과 외래교수
前 2015 ~ 2018 백석대학교 정보통신학부 외래교수
"고박사의 유니티 노트" 유튜브 운영
https://www.youtube.com/@unitynote
소개
게임 프로그래밍 전공으로 게임 개발, 유니티 엔진 강의를 하고 있습니다.
강의 분야 : 유니티 엔진(기초, 2D/3D 게임 개발, VR/AR), 서버, 인공지능, 셰이더, 게임학개론 등
강의
수강평
- [유니티6] 따라하면서 배우는 고박사의 Top-Down Shooting 게임
- [유니티6] 따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 01
게시글
질문&답변
2d게임에서 의복 교체는 어떻게해야할까요?
1. 무기와 같이 SpriteRenderer를 이용해 레이어를 나눠준다. (모자 오브젝트, 망토 오브젝트 등)2. SpriteResolver / Sprite Library를 이용해 각 부위에 SpriteResolver를 붙이고, 의상 세트를 SpriteLibrary로 관리3. 본 애니메이션 방식 (Sprite Skin + PSD Importer) 의상 교체 파츠를 몇개로 할 지, 의상의 개수가 얼마나 되는지에 따라위 방식 중에서 선택해 사용 가능합니다. 애니메이션이 복잡하지 않고, 의상의 개수가 많지 않으면 영상에서 나온 무기 처리 방식처럼 SpriteRenderer를 사용하는 것이 가장 쉽고, 가볍게 처리 가능합니다.
- 0
- 3
- 23
질문&답변
Rigidbody2D의 linearVelocity 제어
유니티의 물리 처리(Rigidbody)가 고정된 물리 시뮬레이션 주기로 호출되기 때문에 속력 처리가 동일한 주기에 반영되도록 FixedUpdate()에서 처리하는 것을 권장합니다. 그리고 기존의 InputManager는 Update() 메소드에서 호출하도록 권장합니다. (FixedUpdate에서 정상 작동하지 않음) 그래서 가장 이상적인 형태는 아래 코드와 같이 Update()에서 키 입력 감지 / 키 값을 멤버변수에 저장, FixedUpdate()에서 멤버변수에 있는 키 값을 바탕으로 속력을 갱신하는 것입니다. private Vector2 moveInput; private void Update(){ moveInput.x = Input.GetAxisRaw("Horizontal"); moveInput.y = Input.GetAxisRaw("Vertical");} private void FixedUpdate(){ rigidbody.linearVelocity = moveInput * moveSpeed;} 보통은 멤버 변수로 만드는게 번거롭다 보니 현재 실습 예제와 같이 지역변수로 한번에 처리하려고 합니다. FixedUpdate()가 권장이지만 크리티컬한 오류가 발생할 확률이 거의 없고, 특히나 지금처럼 GetAxisRaw로 -1, 0, 1의 정수만 받을 때는 더욱 발생 빈도가 적습니다. 거기에 멤버 변수를 만들고 관리하는게 귀찮다보니 다들 습관처럼 고착된게 아닐까 싶습니다. 유니티에서 6.1부터 권장하는 InputSystem을 이용한 키 입력에서는 키 입력 처리를 위한 별도의 이벤트 메소드를 만들다 보니 위에서 권장하는 코드와 같이 멤버 변수를 선언해야 하기 때문에 앞으로는 권장이 아닌 강제적으로 위 예제와 같이 코드를 작성해야합니다.
- 0
- 3
- 26
질문&답변
02. 게임오브젝트 물리와 충돌 마지막 sun예제의 움직임
OnCollisionStay2D(), OnTriggerStay2D()의 경우 설명은 충돌 중일 때 매 프레임 호출이지만"물리적 힘이 가해지고 있을 때"라는 조건이 하나 더 필요합니다.서로 충돌 중이지만 플레이어가 멈춰있어서 물리적 힘이 가해지지 않으면 Stay의 유지 시간은 1초 정도입니다. 계속 유지가 되려면 trigger 물체 위에서 플레이어가 충돌 범위를 벗어나지 않고 충돌이 유지되는 범위 안에서 조금씩 계속 움직여줘야 합니다.
- 0
- 2
- 74
질문&답변
강의 01-02에서 프리팹 렌더링 오류
현재 사용 중인 유니티 버전과 프로젝트를 생성할 때 템플릿 정보를 알 수 있을까요?정상적으로 나오려면 유니티 6000.0.23f1 이상 버전(유니티 6 정식버전), Universal 2D 템플릿으로 생성해야 합니다.
- 0
- 2
- 59
질문&답변
02-05 레벨시작(마지막 강의)에서 SelectLevelController오브젝트의 SelectLevelController 컴포넌트조작
SelectLevelController 스크립트에 작성해둔 ResetData()라는 저희가 만든 메소드입니다. 메소드 앞에 [ContextMenu("..")] 와 같이 어트리뷰트를 작성하면해당 메소드를 유니티 에디터에서 메뉴와 같은 형태로 실행할 수 있습니다.
- 0
- 1
- 69
질문&답변
02-07 별아이템을 bool[] 로 한 이유가 궁금해요.
스테이지마다 3개의 별이 배치되어 있고, 0, 1, 2번 별로 구분됩니다. 0번 별을 획드하면 0번 별 UI 활성화, 1번 별을 획득하면 1번 별 UI 활성화와 같이뒤에서 UI를 출력할 때 별 획득 여부에 따라 지정된 순번의 별 UI가 활성화되기 때문에 배열을 이용해 각 별의 획득 여부를 관리합니다.
- 0
- 1
- 109
질문&답변
02-02 플레이어 체력에서 if(current >1)을 if(current > 0) 로...
if ( current > 1 )이 맞습니다. 하트가 3개 있으니 3대 맞으면 죽어야 하고,current가 3일 때 맞으면 current는 2가 됩니다. (1대)current가 2일 때 맞으면 current는 1이 됩니다. (2대)current가 1일 때 맞으면 죽습니다. (3대)
- 0
- 1
- 81
질문&답변
03-01 Hidden Tilmap에서
알파 값이 1일 때 0까지 바뀌는 시간이 1초입니다.유저가 항상 알파 값이 1일 때 충돌해서 0으로 바뀌고, 0일 때 밖으로 나가서 1로 바뀌진 않습니다. 영상 마지막의 게임 실행과 같이 왔다 갔다 하면서 알파 값이 바뀌는 도중에충돌/충돌 해제 할 수 있기 때문에알파 값이 0.5일 때는 0.5초 동안 Fade 효과를 재생하고,알파 값이 0.2일 때는 0.2초 동안 Fade 효과를 재생하기 위해tilemap.color.a를 Fade 되는 시간으로 설정합니다.
- 0
- 2
- 85
질문&답변
02-04 점프발판 Animation 뷰에서 이미지 나오게 하는 방법이 궁금해요.
지금 이미지 기준으로 왼쪽에 목록을 접거나 여는 "▶" 이렇게 생긴 아이콘을 클릭하면 됩니다.
- 0
- 1
- 99
질문&답변
02-03 추락하는 발판에서 isKinematic = true;로 하면, 중력영향 안받으니
PlatformDrop 클래스에서 OnRespawn() 메소드에 있는rigid2D.velocity = Vector2.zero; 문장을 지우고 실행해보면발판을 밟아서 떨어뜨리고, 다시 리스폰 되었을 때 속력 값이 초기화 안되서리스폰 되자마자 아래로 떨어집니다.
- 0
- 2
- 129