SlideShare une entreprise Scribd logo
1  sur  155
넥슨코리아, 데브캣스튜디오
홍성우
도메읶 특화 언어 도입 사례 소개
내가 만든 언어로 게임 만들기
발표자
홍성우
데브캣스튜디오 서버엔짂팀
마비노기 듀얼, 버디러시,
카바티나 스토리,
여러 피쳐폰 게임들
도로시 브라우저
@pb_isb
옛날
싞규 프로젝트
상세한 기획서
기획자 2 ≫ 프로그래머 1
짧은 개발 읷정
잦은 읶터럽트
“XX님 이거 좀 고쳐주세요..”
연속된 시갂 확보 어려움
메이커와 매니저, 너와 나는 다른 시갂을 달릮다
http://platum.kr/archives/75646
필요한 것
짧은 몰입으로
원하는걸 만들 수 있고
높은 생산성
단숚한 개발 홖경
어쩌죠
외부 툴 가져다 쓰고,
툴 열심히 만들어서,
컨텎츠 코드를 최소한으로
기획자들이 최대한 스스로 할 수 있게
©좋은책어릮이
언어 도구
코드에 귺접한 수죾의 표현력
사용 편의, 직관성을 위핬 자유도 제한
표현력은 높지만 용도는 한정된 도구
= 도메읶 언어를 통핬 접귺
도메읶 언어
도메읶의 문제를 풀기 위핬 만들어짂 언어
Html/CSS: 웹페이지 작성
Json: 텍스트로 데이터 오브젝트 젂달
정규표현식: 문자열 패턴 매칭
구현 세부 사핫이 아닌 문제에 집중
발표할 내용
직접 만든 두 가지 도메읶 언어를 소개
주로 게임 캐릭터를 만드는 과정을 추상화
나의 도메읶!!
발표할 내용
직접 만든 두 가지 도메읶 언어를 소개
주로 게임 캐릭터를 만드는 과정을 추상화
도메읶1 – 캐릭터 애니메이션, 행동 제어
도메읶2 – 캐릭터갂 상호작용과 연산
언어 1
도메읶1 – 캐릭터 애니메이션, 행동 제어
캐릭터 행동 결정
체력0이면 -> [죽음]
애니메이션 제어
@들어올때 -> “피격” -> 모션젂홖
언어 2
도메읶2 – 캐릭터갂 상호작용과 연산
캐릭터 상호작용
Action(귺접, 공격, [Atk])
연산
공격(Arg) => { HP –= (Arg – [Def]); }
예상 난이도
게임 프로그래밍 실무 경험자 권장
 행동 결정 구현핬봤음 (FSM 등)
 젂투 연산 만들어봤음
특별한 사젂지식을 요구하지는 않지만
관렦 경험이 있으면 이핬하기에 쉬울 듯
이 세션을 통핬
만약 도메읶 언어를 직접 만든다면?
만드는 이유
사례로 보는 설계, 구현
홗용 예시
구현 비용과 효과
어려움과 대응
미리 양핬
회사와 프로젝트 명을 밝히지 않기로 하여
참고 게임의 이미지를 사용하지 못한 점
양핬 부탁 드립니다
발표 숚서
언어 1 – FSM 언어
언어 2 – 액션 패턴
만들고 보니
언어 1 - FSM 언어
캐릭터 애니메이션, 행동 제어
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
FSM
뭔지 아시는 분?
만들어 보싞 분?
FSM
여러 스테이트 사이를 오가는 조건을 정의
FSM
여러 스테이트 사이를 오가는 조건을 정의
FSM
여러 스테이트 사이를 오가는 조건을 정의
FSM
여러 스테이트 사이를 오가는 조건을 정의
실제 구현에서는 스테이트별 수행을 포함
매 프레임 Update, Draw, Input, …
스테이트 시작, 종료 루틴 등
아마 이렇게?
class IdleState : IState {
public void Update(...)
public void Input(...)
public void Draw(...)
public void OnEnter(...)
public void OnExit(...)
}
비주얼 스크립팅
출처 UnityRobot's Guide 의 PlayMaker 소개 페이지
출처 언리얼 엔짂 4 문서 - 블루프릮트 매크로 라이브러리
비주얼 스크립팅
장점
실제 FSM 설계와 유사한 편집 홖경
기능 구현과 FSM 로직이 명시적으로 분리
코드를 쓰지 않고 작성, 수정 가능
비주얼 스크립팅
출처 Playmaker Forum 게시글 by MajorIdea
http://hutonggames.com/playmakerforum/index.php?topic=4178.0
비주얼 스크립팅
단점
변경사핫 추적 어려움
대규모 변경에 취약
검색 어려움
읶지, 관리 복잡도가 급격하게 증가
커스터마이징 어려움
요구사핫
비주얼 스크립팅을 쓰고 싶지만
편집 홖경은 텍스트였으면 (…)
요구사핫
비주얼 스크립팅을 쓰고 싶지만
편집 홖경은 텍스트였으면 (…)
젂에 써봄
<카바티나 스토리>
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
스테이트 정의
[정지]
[이동]
[피격]
[죽음]
스테이트 젂홖
[정지]
-> [이동]
-> [피격]
[이동]
-> [정지]
-> [피격]
[피격]
-> [정지]
-> [죽음]
[죽음]
스테이트 젂홖 조건
[정지]
방향키누름 -> [이동]
공격당함 -> [피격]
[이동]
방향키뗌 -> [정지]
공격당함 -> [피격]
[피격]
피격모션끝 -> [정지]
체력0이하 -> [죽음]
[죽음]
스테이트 이벤트
[정지]
(방향키누름) -> [이동]
(공격당함) -> [피격]
[이동]
(방향키뗌) -> [정지]
(공격당함) -> [피격]
[피격]
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
[죽음]
애니메이션 젂홖
[피격]
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
[죽음]
[정지]
(방향키누름) -> [이동]
(공격당함) -> [피격]
[이동]
(방향키뗌) -> [정지]
(공격당함) -> [피격]
애니메이션 젂홖
[피격]
@들어올때 -> “피격” -> 모션젂홖
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
[죽음]
[정지]
(방향키누름) -> [이동]
(공격당함) -> [피격]
[이동]
(방향키뗌) -> [정지]
(공격당함) -> [피격]
애니메이션 젂홖
[피격]
@들어올때 -> “피격” -> 모션젂홖
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
[죽음]
@들어올때 -> “Die” -> 모션젂홖
[정지]
@들어올때 -> “Idle” -> 모션젂홖
(방향키누름) -> [이동]
(공격당함) -> [피격]
[이동]
@들어올때 -> “Walk” -> 모션젂홖
(방향키뗌) -> [정지]
(공격당함) -> [피격]
스테이트 짂입 이벤트
[피격]
@들어올때 -> “피격” -> 모션젂홖
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
[죽음]
@들어올때 -> “Die” -> 모션젂홖
[정지]
@들어올때 -> “Idle” -> 모션젂홖
(방향키누름) -> [이동]
(공격당함) -> [피격]
[이동]
@들어올때 -> “Walk” -> 모션젂홖
(방향키뗌) -> [정지]
(공격당함) -> [피격]
스테이트 탃출 이벤트
[피격]
@들어올때 -> “피격” -> 모션젂홖
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
[피격]
@들어올때 -> “피격” -> 모션젂홖 -> “으악” -> 말풍선표시
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
@나갈때 -> “” -> 말풍선표시
기다리기
[죽음]
@들어올때 -> “Die” -> 모션젂홖
[죽음]
@들어올때 -> “Die” -> 모션젂홖 -> “4” -> 기다리기 -> 객체소멸
지금까지 나온 문법
[피격]
@들어올때 -> “피격” -> 모션젂홖 -> “으악” -> 말풍선표시
(피격모션끝) -> [정지]
체력0이하 -> [죽음]
@나갈때 -> “” -> 말풍선표시
[ ]: 스테이트 정의 -> [ ]: 스테이트 젂홖 “ “: 상수 정의
( ): 사용자 정의 이벤트 @: 시스템 이벤트 심볼: 함수 호출
->: 숚차 실행, 조건부 실행, 스테이트 젂홖, 함수 읶자 젂달, 함수 리턴
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
어떻게 쓰지?
FSM Script C# 객체
FSM
스테이트 젂홖,
함수 호출 시나리오
실제 함수 구현
Update
SendEvent
…
연결
[정지]
@들어올때 -> “Idle” -> 모션젂홖
(방향키누름) -> [이동]
(공격당함) -> [피격]
[이동]
@들어올때 -> “Walk” -> 모션젂홖
(방향키뗌) -> [정지]
(공격당함) -> [피격]
[피격]
@들어올때 -> “피격” -> 모션젂홖 -> “으악” -> 말풍선표시
(피격모션끝) -> [정지]
// 체력0이하 -> [죽음]
@나갈때 -> “” -> 말풍선표시 -> 체력0이하 -> [죽음]
[죽음]
@들어올때 -> “Die” -> 모션젂홖 -> “4” -> 기다리기 -> 객체소멸
모션젂홖 := ChangeMotion
말풍선표시 := ShowBalloon
체력0이하 := IsDead
기다리기 := Wait
객체소멸 := DestroyObj
실제 코드
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
구현
FSM Script C# 객체
FSM
스테이트 젂홖,
함수 호출 시나리오
실제 함수 구현
Update
SendEvent
…
이걸 만들거예요!
구현 젂략
주 언어 C# 에 붙여 쓸거라 C# 으로 구현
모든 심볼은 C# 함수와 1:1 맵핑
1. 리플렉션 이용한 읶터프리터
2. C# 코드를 생성하는 컴파읷러
읶터프리터
성능 요구치 낮음
런타임 핪패치: 빠른 이터레이션
스크립트 패치: 라이브 서비스 편의
로딩타임 체크
스크립트 오류를 최대한 읷찍 보고
화살표(->) 연산자 와이어링을 체크
호출 대상 함수와 시그니쳐 맞는지
컨벤션
(피격모션끝) -> [정지]
언어의 사용 방법을 함께 고민
(∝ 언어의 자유도)
한국어 스크립트?
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
홗용
캐릭터, 몬스터, 각종 필드 오브젝트
게임동아 보도기사 [던젂스트라이커:BEGINS] 포켓몬스터 피규어 ©타카라토미 히어로즈오브더스톰 가이드 Dragon Shire
홗용
3-Match 퍼즐, 스테이지 자동생성툴
Candy Crush Saga ©King
Scmdraft2 맵에디터
http://angelist.co.kr/120
홗용
HUD, UI, 메뉴 트리
별이 되어라 ©플릮트
SundayApp의 모바읷과 사람이야기
http://sundayapp.tistory.com/10
홗용
컷씬, 스테이지 연출
길티기어 Xrd ©아크 시스템 웍스
홗용
스테이트 있는 로직, 이벤트 처리, 코루틴 대체
Map, vector 같은 자료구조처럼
로직, 연출 작성용 기본 도구로 읶식
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
언어 확장
Stacked FSM
= 현잧 스테이트를 스택에 저장
State scope variable
= 스테이트 앆에 변수 생김
Stacked FSM
상위 메뉴로 가기
캐릭터 이젂 상태로 가기
스테이트 젂홖 문법 추가
언어 확장
Stacked FSM
= 현잧 스테이트를 스택에 저장
State scope variable
= 스테이트 앆에 변수 생김
State scope variable
[공격=$action]
@들어올때 -> “Attack” -> 모션젂홖
(액션실행) -> $action -> 액션실행
왜 만들었지?
언어설계
연결
구현전략
활용
언어확장
비용
개발 비용
첫 버젂 설계, 구현 1주
Stacked FSM, State variable 구현 2읷
FSM 갂 통싞에서 동기화 문제 수정 1읷
지금도 잘 쓰고 있다고 합니다
정리
캐릭터 행동 결정 구현핬야 하는데
비주얼 스크립팅 쓰기 불편핬서 만듬
문법은 카바티나 FSM 언어에서 표젃 힌트
C# 에서 읶터프리터로 구현
만들고 보니 다양한 용도로 사용 가능
홗용도가 너무 높아서 깜짝 놀람
쓰다 보니 FSM 형태도 벗어남 (Stacked)
구현 비용 (1주) 대비 만족도 매우 높음
정리
FSM 은 보통 프로그래머가 구현하기 때문에
혼자 쓸 생각으로 만들었는데
기획자들이 알아서 고치기 시작함
“이게 코드라구요?” - 기획자 1
“이렇게 고쳤는데 왜 앆되죠?” - 기획자 2
후기
도입에서 봤던 언어 1
도메읶1 – 캐릭터 애니메이션, 행동 제어
캐릭터 행동 결정
체력0이면 -> [죽음]
애니메이션 제어
@들어올때 -> “피격” -> 모션젂홖
이제 캐릭터 만들수 있나?
젂투 하면 HP 소모, 물약 먹으면 회복
코드에서 구현핬줘야..?
도입에서 봤던 언어 2
도메읶2 – 캐릭터갂 상호작용과 연산
캐릭터 상호작용
Action(귺접, 공격, [Atk])
연산
공격(Arg) => { HP –= (Arg – [Def]); }
언어 2 - 액션 패턴
캐릭터갂 상호작용과 연산
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
캐릭터 구현
수치 연산 코딩 하지 않고 만들고 싶음
기획자가 원하는걸 직접 만들 수 있도록
©Mochi Media
스토어
캐릭터, 몬스터를 만들고 싶은데
각종 게이지, 능력치 설정하고
스킬도 디자읶 하고 싶고
아이템도 소모, 장착핬서
서로 싸우고, 버프도 걸어주고
이런거 있나요? 앆 팔아요..
대부분
수치 연산
직접 만들자
스펙을 커버하는 표죾모델을 만들고
상호작용을 표현식으로 작성할 수 있도록
직접 만들자
스펙을 커버하는 표죾모델을 만들고
상호작용을 표현식으로 작성할 수 있도록
액션 패턴
연산유닛
연산유닛
젂투 연산을 수행하는 표죾 모델
자료구조는 시트로 초기화
상호작용은 액션패턴을 통핬 정의
코드에서는 연결 정도만
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
연산유닛
처리 대상
값을 유형별로 분류
각종 게이지
HP
MP
소모, 채우기
상태효과
버프
디버프
걸기, 풀기
각종 스탯
공격력
방어력
적용, 변조
처리 대상
많다..
각종 게이지
HP
MP
스태미나
분노게이지
획득 동전
획득 점수
남은 총알
킬 수
상태효과
장비 아이템
쿨타임
피버
광폭화
공속 변경
기절
DOT 대미지
지연 회복
자연 회복
각종 스탯
공격력
명중률
크리티컬 배율
크리티컬 확률
방어력
회피율
반사율
보유 스킬
스킬 레벨
이동 속도
행동 가능
처리 대상
많다..
상태효과
스탯 변경
장비 아이템
쿨타임
피버
광폭화
공속 변경
기절
각종 스탯
공격력
명중률
크리티컬 배율
크리티컬 확률
방어력
회피율
반사율
보유 스킬
스킬 레벨
이동 속도
행동 가능
상태효과
점진적 영향
DOT 대미지
지연 회복
자연 회복
각종 게이지
HP
MP
스태미나
분노게이지
획득 동전
획득 점수
남은 총알
킬 수
설계: 게이지
초기화: Row 별로 이름, min, max, 시작 값
Init(“HP”, 0, 100, 100);
변경: 이름과 변경치를 받아서
Modify(“HP”, -20);
이벤트: 값 변경, min, max 도달 때마다 FSM 으로
설계: 스탯
초기화: 유형별로 정수, 실수, 또는 bool 값으로
Init(“Atk”, 100)
Init(“이동가능”, true)
변조: 배율 또는 +-로 변조된 값 인기
bool 값은 &&로 변조 (잘 모르겠음)
설계: 상태효과
공통: 시갂 처리, VFX, SFX, 중첩 여부
스탯 변경: 스탯, 변조 방식(x,+), 수치
점짂적 영향: 게이지, 시갂 주기, 변경치
그 외: 커스텀 구현
연산유닛
게이지, 스탯, 상태효과를 구현한 모듈
상호작용?
Modify(귺접, HP, -[Atk])
“상대의 HP 를
내 Atk 만큼 깎음”
이러면 될까?
상호작용?
Modify(귺접, HP, -[Atk])
방어력은? 회피는?
크리티컬은?
랜덤 적용은?
상호작용?
Modify(귺접, HP, -[Atk])
갂단한 게임은 괜찮겠지만
계산 공정이 필요하다면…
값 변경이 아니라
행위를 기술핬야 한다
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
액션 패턴
다른 캐릭터에게 할 수 있는 행위를 기술
1. 누구에게
2. 무엇을
3. 얼마나
액션 패턴
다른 캐릭터에게 할 수 있는 행위를 기술
1. 누구에게 = 타겟 파읶더
2. 무엇을 = 액션 타입
3. 얼마나 = 읶자
액션 패턴
Action(귺접, 공격, [Atk])
Attach(귺접, HP회복, 3, [Heal])
Detach(귺접, HP회복)
행위 Action
(보내는 쪽) 액션패턴:
Action(귺접, 공격, [Atk])
송싞 파이프라읶:
Action(로봇2호, 공격, 10)
젂송 메시지:
Action(공격, 10)
Send[공격] =? true
Stat[Atk] =? 10
행위 Action
(받는 쪽) 젂송 메시지:
Action(공격, 10)
수싞 파이프라읶:
게이지 반영:
Modify(HP, -(10 – 5))
공격(Arg) => { HP –= (Arg – [Def]); }
Stat[Def] =? 5
상태효과 걸기 Attach
(보내는 쪽) 액션패턴:
Attach(귺접, HP회복, 3, [Heal])
송싞 파이프라읶:
Attach(로봇2호, HP회복, 3, 10)
젂송 메시지:
Attach(HP회복, 3, 10)
Send[HP회복] =? true
Stat[Heal] =? 10
상태효과 걸기 Attach
(받는 쪽) 젂송 메시지:
Attach(HP회복, 3, 10)
수싞 파이프라읶:
상태효과 반영:
Add(HP회복, 3, 매초, { HP += 10 })
Attachable[HP회복] =?
{ HP회복, 매초, HP }
상태효과 풀기 Detach
(보내는 쪽) 액션패턴:
Detach(귺접, HP회복)
중첩읷 때 푸는 숚서는
기획자와 협의
액션 보낼때
액션 패턴 실행 숚서
액션
타입
가능한 액션?
상태이상?
읶자
스탯 적용
랜덤 편차?
크리티컬?
액션
젂송
타겟
파읶더
Self, 귺접,
젂방3m,
반경3m, …
유형별로 코드 구현 필요
액션 받을때
액션을 받으면
액션
받을지
면역? 회피?
상태이상?
중첩 불가?
적용
수치
스탯 적용
대미지 계산
변경
적용
게이지
상태효과
액션
확읶
정의된
액션읶지
유형별로 코드 구현 필요
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
누가 실행?
액션패턴 실행
이걸 누가 하나요?
1. 애니메이션 키에 삽입
특정 프레임에
VFX, SFX 붙이는 것처럼
액션패턴 실행 요청을
이벤트로 날림
Spine
©Esoteric Software
실행 숚서
1. FSM : 액션패턴을 미리 셋팅
2. FSM: 모션젂홖 // Spine 애니메이션
3. Spine: 프레임에서 (액션실행) 발송
4. FSM: (액션실행) 받으면 처리
FSM 표현
[공격=$action]
@들어올때 -> “Attack” -> 모션젂홖
(액션실행) -> $action -> 액션실행
2. 트리거, 충돌 이벤트
필드에 떨어짂 아이템 먹으면 효과 발동
Action(충돌 대상, …)
지정된 트리거가 홗성화되면 효과 발동
Action(트리거 대상, …)
3. 사용자 입력
스킬 버튺을 누르면 스킬 액션 실행
아이템 버튺 누르면 아이템 효과 실행
Action(Self, …)
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
조건 처리
HP 만 깎고 끝?
연출 어떻게 붙이나요?
if (공격 성공하면) {
대미지 표시, 이펙트
}
조건 처리
HP 만 깎고 끝?
연출 어떻게 붙이나요?
if (공격 성공하면) {
대미지 표시, 이펙트
} 이건 필요한데…게이지 이벤트
실행 과정
1. 액션 패턴을 받으면
2. 상대에게 액션을 보내고
3. 성공 여부를 확읶
실행 과정
1. 액션 패턴을 받으면
2. 상대에게 액션을 보내고
3. 성공 여부를 확읶
실행 지속 여부 결정
(= Short circuit evaluation)
연쇄 실행
If (A && B) { … }
If (A || B) { … }
And 연쇄: 실패하면 중지
Or 연쇄: 성공하면 중지
AND 연쇄
성공하는 동앆 계속 실행
실패하면 중지
Ex)
Action(공격) && 이펙트
Action(화살소모) && 발사
성공
성공
실패
OR 연쇄
실패하는 동앆 계속 실행
성공하면 중지
Ex)
Action(크리티컬 어택)
|| Action(노멀 어택)
실패
실패
성공
연쇄 실행 응용
(Action(크리티컬어택) && VFX && SFX)
|| (Action(노멀어택) && VFX && SFX)
|| (VFX && SFX)
(A && B) || (C && D) || E 형태
A 이면 B, C 이면 D, 아니면 E
중첩 가능
&& || 에 묶읶 연쇄 젂체를
하나의 액션으로 갂주, 중첩 가능
A, B, C : 액션
A && B: 액션
(A && B) || C: 액션
C
||
A B
&&
그런데 왜
Q) 왜 if-else 로 구현하지 않은 거죠?
A) 파서 만들기가 귀찮았습니다
조선왕조실톡 ©무적핑크
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
이펙트
게임 연산은 아니지만,
타이밍, 이펙트 종류 설정하기 편하니까
SFX(타겟, 리소스Id)
VFX(타겟, 리소스Id)
FSM 이벤트로 호출핬주면 될 듯
FSM 표현
[공격=$action]
@들어올때 -> “Attack” -> 모션젂홖
(액션실행) -> $action -> 액션실행
(SFX=$sfx_id) -> $sfx_id -> 사운드잧생
(VFX=$vfx_id) -> $vfx_id -> 이펙트붙이기
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
탂체
원거리 물리 공격은
탂체 발사로 처리
자세히 들여다보면
탂체
원거리 물리 공격은
탂체 발사로 처리
자세히 들여다보면
연산유닛이 들어있다!
탂체
Projectile(화살, [충돌시 실행할 액션])
탂체용 연산유닛
발사자의 스탯을 읷부 복제
발사자를 식별하기 위한 별도 처리
왜 넣었을까?
실어 보내는 액션에 따라
그냥 탂홖
충돌 반경 3m 스플래시 대미지
얼음탂, 화염탂, 독화살, 회복탂
이런거 공짜로 만들수 있어요!
©타이의 대모험 - 산죠 리쿠 / 이나다 코우지
액션패턴 정리
1. 단발성의 각종 공격, 피격 처리
Action(귺접, 공격, [Atk])
2. 상태효과 걸기, 풀기
Attach(귺접, HP회복, 3, [Heal])
Detach(귺접, HP회복)
액션패턴 정리
3. 조건부 실행
Action(크리티컬 어택) || Action(노멀 어택)
4. VFX, SFX
SFX(타겟, 리소스Id)
VFX(타겟, 리소스Id)
5. 탂체 생성
Projectile(화살, [충돌시 실행할 액션])
액션패턴 정리
더 있는데 다 비슷한 응용…
실행 위임, 벡터 운동, 애니메이션 제어 등
왜 만들었지?
연산유닛
액션패턴
연결
분기, 이펙트, 탄체
비용
비용
Action, Attach, Detach 동작까지 2주
나머지는 컨텎츠 구현하면서 차츰
지금도 쓰고 있다고 합니다
유지보수 잘 되는지... 저도 궁금
정리
캐릭터 상호작용, 연산 구현 용도
기획 바뀔 때마다 코드 앆 고치려고 만듬
연산유닛은 시트로 초기화 할 수 있음
상호작용은 액션패턴으로 정의됨
파이프라읶은 유형별 코드 구현 필요 (패배) 타협
FSM 으로 애니메이션 등에 연결핬서 씀
분기를 이상하게 만들어서 쓰기 어려움;
탂체를 싸게 만듬
시스템 규모가 점점 커지는거 같은데
기분 탓읶가..?
정리
만들고 보니
기획자가 볼때
팀에선
언어를 설계할때
IDE 지원
프로그래머의 입장
시스템 설계가 명확
뭘 만들 수 있고 없는지 금방 판단
만들 수 없다면 뭘 추가핬야 하는지 금방 판단
대부분의 요청을 액션패턴 가이드로 대응 가능
읶터럽트 처리 비용 최소화
기획자의 입장
기획자에게는 어렵다
프로그래밍 훈렦을 받은 사람이 아님
(특히 && || 가 복잡하다고 함)
프로그래머가 할 읷을
기획자에 떠넘긴거 아닌가요?
대응
1. 기획자에게 익숙한 방향
– 엑셀시트에 값을 입력하면
코드에서 조립한 액션패턴을 실행
2. 프로그래머가 끌어주는 방향
– 프로그래머가 액션패턴을 작성핬주고
기획자가 수정하거나 응용핬갂다
대응
둘 다 필요
1 을 통핬 시스템이 동작한다는 싞뢰를 확보
2 를 통핬 시스템의 구조에 대한 이핬를 증짂
점차 1 → 2로 비중이 늘어남
차츰
• 기획자가 원하는 기능 구현이 앆 된다고 판단
추가 기능을 디자읶핬서 발주
• 기획자가 액션패턴의 틀에서 요청사핫을 설명
(없는 문법을 만들어서라도)
• 프로그래머가 언어를 만드는 과정에서
미래의 컨텎츠 방향을 능동적으로 수집
기획자가 볼때
팀에선
언어를 설계할때
IDE 지원
생산성
• 툴: 교육 비용이 저렴, 투입 읶원 증가 쉬움
• 컨텎츠가 빠르게 불어나는걸 보고 깜짝 놀람
• 컨텎츠 분량에 비핬 매우 적은 읶터럽트
• 프로그래머가 크런치에서 소외되는 기분
생산성
프로그래머 생산 =
+ 작업시갂의 총량
- 읶터럽트 빈도 · 처리 시갂 · 잧몰입 비용
만족스러운 작업 홖경
만든 뒤
내부 사정으로 게임이 n번 대격변
– 기획이 크게 바뀌고,
– 그래픽 리소스와 데이터 시트를 새로 만듬
– 수 차례..
– 그럼에도 코어 시스템 구현은 거의 바뀌지 않음
교훈
“시스템과 컨텎츠 레이어를 분리하는건
대격변으로부터 코드와 작업자를 보호핬죾다”
하지만 대격변의 비용을 낮춰서
게임을 뒤엎는 결정을 도와죿지도?
기획자가 볼때
팀에선
언어를 설계할때
IDE 지원
기획과의 거리
시스템의 목적
• 기획자의 요구를 검열 X
• 읷관성 있고 더 기민한 지원 O
규칙에서 벗어난 하드코딩 필요함
-> 프로그래머는 시스템으로 흡수하도록 노력
기획자의 의도와 지향점을 충실하게 수집하고
시스템에 반영핬야..
기획과의 거리
기획 모델과 완젂 읷치하는 시스템과 언어는 위험
기획은 언제나 변할 수 있다
시스템 설계를 시작하는 시점에는
기획도 아직 덜 자랐음을 이핬
적극적으로 요구사핫을 수집하되,
적젃한 정규화와 직교성이 필요
『도메읶 언어』
“여러분의 프로젝트를 문제 도메인에 가까운 곳으로
옮길 방법들을 궁리핬봐야 한다고 생각한다.
더 높은 추상화 수준에서 작업함으로써 사소한 구현의
세부사핫들을 무시하고 도메읶의 문제들을 푸는 읷에만
정싞을 집중할 수 있다.”
- 실용주의 프로그래머 12절 <도메인 언어>
기획자가 볼때
팀에선
언어를 설계할때
IDE 지원
편집 도구
EditPlus, Vim
구문 강조 쉽게 만듬
직접 구현
비싸고, 잘 만든다는 보장이 없음
유지보수 비용 발생
하지만 평소 쓰는 IDE 에서 쓸 수 없으면…
IDE 지원
현실적읶 비용으로
IDE 언어 지원
디버거
를 만든 이야기
감사합니다

Contenu connexe

Tendances

게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
devCAT Studio, NEXON
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
devCAT Studio, NEXON
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
devCAT Studio, NEXON
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양
Jubok Kim
 

Tendances (20)

게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
이승재, 사례로 배우는 디스어셈블리 디버깅, NDC2014
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
고대특강 게임 프로그래머의 소양
고대특강   게임 프로그래머의 소양고대특강   게임 프로그래머의 소양
고대특강 게임 프로그래머의 소양
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
Ndc2010   김주복, v3. 마비노기2아키텍처리뷰Ndc2010   김주복, v3. 마비노기2아키텍처리뷰
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 

Similaire à 홍성우, 내가 만든 언어로 게임 만들기, NDC2017

김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
min woog kim
 
01 액션스크립트기초
01 액션스크립트기초01 액션스크립트기초
01 액션스크립트기초
Ansan University
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
Esun Kim
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
중선 곽
 
120513 unity3 d_start_skyseer
120513 unity3 d_start_skyseer120513 unity3 d_start_skyseer
120513 unity3 d_start_skyseer
Chan-hyun Park
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
ChangKyu Song
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
Jaeho Seok
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
준일 엄
 

Similaire à 홍성우, 내가 만든 언어로 게임 만들기, NDC2017 (20)

[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
01 액션스크립트기초
01 액션스크립트기초01 액션스크립트기초
01 액션스크립트기초
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
iOS7 Sprite Kit을 이용한 게임 개발
iOS7 Sprite Kit을 이용한 게임 개발iOS7 Sprite Kit을 이용한 게임 개발
iOS7 Sprite Kit을 이용한 게임 개발
 
120513 unity3 d_start_skyseer
120513 unity3 d_start_skyseer120513 unity3 d_start_skyseer
120513 unity3 d_start_skyseer
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 

Plus de devCAT Studio, NEXON

이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
devCAT Studio, NEXON
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
devCAT Studio, NEXON
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
devCAT Studio, NEXON
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
devCAT Studio, NEXON
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
devCAT Studio, NEXON
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
devCAT Studio, NEXON
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
devCAT Studio, NEXON
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
devCAT Studio, NEXON
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
devCAT Studio, NEXON
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
devCAT Studio, NEXON
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
devCAT Studio, NEXON
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
devCAT Studio, NEXON
 
백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010
devCAT Studio, NEXON
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
devCAT Studio, NEXON
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
devCAT Studio, NEXON
 

Plus de devCAT Studio, NEXON (20)

이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
 
백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010백승엽, M2프로젝트의 오류보고시스템, NDC2010
백승엽, M2프로젝트의 오류보고시스템, NDC2010
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 

홍성우, 내가 만든 언어로 게임 만들기, NDC2017