Puzzle을 기능 기준으로 수정 하려다가 수 많은 에러에 맞고 쓰러졌습니다.

Puzzle의 코어한 부분들이 모두 Blueprint로 구현되어 있었기에 기능 구현이고 뭐고
일단 C++ 스크립트로의 수정 과정이 선행 되어야 했습니다.

 

그래서 안타깝게도 하루만에 순서를 바꾸어 Interface 적용을 앞땡겼습니다.

Interface를 적용하고자 하는 부분을 탐색해보자 정말 수 많은 선택지가 펼쳐졌습니다.

그 중에서 단순 생성과 관련된 함수나, 외부에서 접근할 필요가 없는 트리거에 대한 변경 함수를 제외하고 
나머지 상태 확인이나 트리거 변경, 선언 함수들을 Interface로 엮었습니다.

 

그 결과는 다음과 같습니다.

 

더보기

IDamagable

  • Receive Damage
  • Receive Heal

 

더보기

IDamageActivity

  • Get Damage
  • Update Damage

 

더보기

IAttachable

  • Attach Piece
  • Detach Piece

 

더보기

ICheckAnswer

  • Push Answer
  • Pop Answer
  • Reset Answer
  • Check Answer
  • Get Answer

 

더보기

ICheckInRangeCharacter

  • Add In Queue
  • Remove In Queue
  • Save In Queued List
  • Reset Queue
  • Reset Saved Data

 

더보기

IObjectActiviy

  • Activate
  • InActivate
  • Reset
    Character: Visibility, Collision, Tick, Input
    Object: Visibility, Collition, Tick, bActive

 

더보기

IProjectileActivity

  • Fire
  • Destroy
  • Reset

 

더보기

IClimbable

  • Get Climb Type
  • Get Climb Velocity
  • Get Climb Acceleration
  • Get Exit to Top Teleport transform
  • Get Enter from Top Teleport transform

 

더보기

IClimbActivity

  • Enter Rope Top
  • Enter Rope Bottom
  • Exit Rope Top
  • Exit Rope Bottom
  • Enter Wall Top
  • Enter Wall Bottom
  • Exit Wall Top
  • Exit Wall Bottom
  • Enter Ladder Top
  • Enter Ladder Bottom
  • Exit Ladder Top
  • Exit Ladder Bottom
  • Exit Climb
  • Enter Climb
  • Is Climbing
  • Is Climb Up
  • Is Climb Down
  • Is Attach to Top
  • Is Attach to Bottom
  • Is Climbable

이들을 하나씩 적용하고, 이미 기능이 적용 되어 있다면 이를 수정 할 예정입니다.

 

이 외에 변경점이라면 이전에 Climb 기능 구현을 하면서 터득한
Animation Notify를 이용해 Melee Attack 기능을 개선하고자 합니다.

우선 Hit 이벤트가 여러번 발생하는 것을 막아주는 Lock을 Semaphore로 변경하고자 합니다.

이를 통해 한 Character에게는 한번의 이벤트만 발생하지만, 한번에 여러 Character에게 이벤트가 발생할 수 있습니다.

그리고 데미지 계산이나 Semaphore 연산을 RPC 함수를 이용하고자 합니다.

 

그리고 Wall을 분할하고자 합니다.

현재의 Wall은 Character의 이동 경로를 막는 방해물과 등반 가능한 등반 Object가 동시에 혼용되고 있습니다.

이를 두개로 나누어 기존의 Wall은 후자의 것으로 사용하고, 

전자의 것에 어울리는 새로운 Object를 생성하고자 합니다.

 

마지막으로 Puzzle을 새로 개발하고자 합니다.

BP 기반에 이전 Trap에 너무 의존적이었기에 완전히 삭제하고, 새로운 Puzzle을 개발하고자 합니다.

이번에는 UI 등 편의성을 개선할 계획도 있습니다.

새로운 Puzzle은 기존의 Break, Select를 우선 구현하고, 새로운 것을 구현할지 그때 가서 고민하려 합니다.

 

진행 순서는

1. Character 자체 기능 개선

2. Wall 분할

3. Climb 기능 개선

4. Trap 기능 개선

5. Puzzle 생성

입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.22 개발일지  (0) 2020.07.22
20.07.20 개발일지  (0) 2020.07.20
20.07.15 개발일지  (0) 2020.07.15
20.07.10 개발일지  (0) 2020.07.10
20.07.09 개발일지  (0) 2020.07.09

오늘은 Spawn Object의 Collision과 Hidden을 어떻게 처리할지 고민을 좀 하였습니다.

처음에는 Interface를 사용하지 않고 한번 구현해 보려 했으나,
Character와 Object를 모두 Spawn하려면 결국 Interface를 쓰거나, 
Spawn Trap을 Object Spawn고 Character Spawn으로 다시 나누거나, 

Object의 근간인 THObject의 내용을 Interface로 따로 빼내거나 해야 합니다.

 

결국 Interface를 쓰거나 구조를 바꾸거나 둘 중 하나입니다.

여기서 고민이 생기기 시작합니다.

 

Interface를 쓰지 않는다면 지금 당장 가장 빠르게 구현을 할 수 있겠지만, 
앞으로도 이런 문제를 직면 하면 SubClass를 쪼개줘야 할 것입니다.

어쩌면 동시에 두 가지 기준을 잡는다면 Class를 4개 이상으로 쪼개야 할 것입니다.

 

Interface를 쓴다면 지금과 같은 문제를 효과적이고 가장 좋은 방법으로 해결할 것입니다.

하지만 현재 Interface를 생성하는 방식을 정확히 파악하지 못하고 있고, 
또 Document에서 제시된 것으로 보아 여태까지 개발해온 많은 상호작용들을
Interface로 엮어서 다시 구현해야 할 것 같습니다.

다른 작업이 덩쿨에 엮이듯이 줄줄이 딸려 오는 것이죠.

 

VS 업데이트 2시간 동안 상당히 고민을 하다가 잠들고, 다시 일어나 고민 한 끝에
Interface를 적용하기로 결정했습니다.

단, 우선순위는 뒤로 미룰 것입니다.

일이 어느정도 마무리가 되고 나서 Interface를 전반적으로 적용을 하고자 합니다.

 

그래서 빠르면 이번주. 혹은 다음주부터 Puzzle쪽 기능을 우선 구현하고자 합니다.

Puzzle의 Multiplay상 기능 구현이 완료가 되면, Project 전반적으로 Interface 분리 작업을 진행 할 것입니다.

 

그 뒤에는 Level에 특정 스크립트를 C++로 적용할 수 있는지 조사할 계획입니다.

이는 Teleport나 Brush등의 기능들에 필요하다고 판단이 되며,
후에 구조와 기능에 따라 다른 Trap들도 다시 한번 수정을 할 수도 있을 것입니다.

 

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.20 개발일지  (0) 2020.07.20
20.07.16 개발일지  (0) 2020.07.16
20.07.10 개발일지  (0) 2020.07.10
20.07.09 개발일지  (0) 2020.07.09
20.07.08 개발일지  (0) 2020.07.08

오늘 Spawn Trap 문제를 해결하다가 남은 기간동안 더 진행이 힘들다고 판단하여 제출을 하였습니다.

평소와 같은 개발이지만 "기간 내에 해야한다."라는 압박이 있어서인지 유난히 더 지친 감이 없지 않습니다.

그래서 이번주 일요일까지는 남은 기간에는 간단하게 알고리즘 문제만 풀고, 

다음주에는 주 2회 Unreal과 주 4회 전공책 읽기를 하고자 하고자 합니다.

 

때문에 12일까지는 일지가 없을 예정입니다.

오늘 쓰는 것은 현재 직면한 문제점과 추가 이슈, 간단한 예상 해결 방안입니다.

 

1. Spawn 된 Object의 Activate 설정 문제

크게 두가지 문제가 있다.

하나는 Host에게서만 Object가 숨겨져 있고 Client에서는 숨겨져 있지 않은 것.

C++ Script에서 작성한 동작이 Host는 정상적으로 작동하지만, 

Client에서는 전혀 작동하지 않을 뿐더러 2배로 생성되어 있다.

Actor를 보이지 않게 하는 함수도 Script에 선언되어 있으나 작동하지 않는다.

Blueprint에서 따로 선언해줘야 한다.

 

다른 하나는 Object의 Collision이 제대로 Inactive 되지 않는 것.

C++ Script에서 같은 함수를 선언했으나 작동하지 않고 따로 BeginPlay에서 선언해줘야 작동한다.

 

이 부분은 Actor들에게 임시로 CollisionDisable 함수를 생성해서 해결하고자 한다.

우선은 이렇게 해놓고, 차후 Interface로 교체하려 한다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.16 개발일지  (0) 2020.07.16
20.07.15 개발일지  (0) 2020.07.15
20.07.09 개발일지  (0) 2020.07.09
20.07.08 개발일지  (0) 2020.07.08
20.07.07 개발일지  (0) 2020.07.07

오늘은 하루종일 Spawn Trap 계열에서 발생하는 문제를 해결하려 하였으나 아직 해결하지 못했습니다.

과제 내용을 정리하는 것까지 합하면 내일이나 모래까지 해당 내용을 수정하고,

그 다음날에 내용 정리해서 제출해야 할 것 같습니다.

 

때문에 오늘은 간단히 이슈만 정리합니다.

1. virtual void Activate()에서 Object가 게임 시작 시 눈에 보이지 않도록 하고 있는데 SpawnTrap은 이것이 작동하고 FireTrap은 client에서 projectile이 2배로 많이 보인다.

2. SetCollisionEnable을 호출하면 크래시가 난다.

 

이 두 부분만 해결하면 이 Trap도 완벽히 작동한다고 장담할 수 있을 것 같습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.15 개발일지  (0) 2020.07.15
20.07.10 개발일지  (0) 2020.07.10
20.07.08 개발일지  (0) 2020.07.08
20.07.07 개발일지  (0) 2020.07.07
20.07.06 개발일지  (0) 2020.07.06

어제 문제가 있었던 Block Trap의 Wall이 Replicated 되지 않는 문제를 수정하였습니다.

이는 모든 함수가 RPC 함수임에도 객체 그 자체가 Replicated 설정이 되어있지 않아서 생긴 문제였습니다.

이를 설정하였더니 정상적으로 벽이 움직였고, 이를 토대로 다른 Block Trap을 상속받는 Trap들을 수정했습니다.

결과적으로 Block Trap 계열은 모두 Multiplay상에서 잘 작동하고 있습니다.

 

그 다음에는 Puzzle을 수정할지 다른 Trap을 수정할지 고민을 하였습니다.

Puzzle은 수정된 Block Trap과 직접 연관된 것이고, Trap은 작업이 일관적이기 때문입니다.

잠깐 고민하다가 그래도 Trap을 다 끝내놓는게 좋다고 판단하여 Trap을 마저 수정하였습니다.

 

그래서 고른 다음 타겟은 Spawn Trap 계열입니다.

간단한 RPC 함수들을 생성하여 작업을 하였는데, 몇가지 문제가 발생하였습니다.

Spawn Trap 자체는 Server에서는 정상적으로 작동하는 반면,

Client에서는 Spawn될 Actor가 숨겨지지 않은 채로 존재합니다.

그러다가 Trap이 Activate 될 때 다른 Actor가 하나 더 Spawn 됩니다.

 

Spawn Trap 계열인 Projectile Trap은 Projectile이 Character와 충돌 판정은 나나, 화면에 보이지 않습니다.

정리하자면, 두 Trap 모두 기능적으로는 어느정도 잘 작동하는 반면 시각적인 부분이 잘못 처리되고 있다는 것입니다.

 

개인적으로 조금 더 욕심을 내서 오늘 문제를 해결하고 싶었으나, 조금 멀미가 나서 내일로 작업을 미루었습니다.

고로 내일은 Spawn Trap 계열의 Trap들의 문제를 수정할 예정입니다.

그 다음에는 Teleport Trap을 넘어가고 Puzzle을 수정하고자 합니다.

Teleport Trap은 구조가 다른 Trap들과 상이하여 구조적 개선이 필요하기 때문입니다.

만약 과제에 포함이 되더라도, Puzzle을 먼저 수정해놓고 추가사항으로 하고자 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.10 개발일지  (0) 2020.07.10
20.07.09 개발일지  (0) 2020.07.09
20.07.07 개발일지  (0) 2020.07.07
20.07.06 개발일지  (0) 2020.07.06
20.07.05 개발일지  (0) 2020.07.05

오늘은 BlockTrap의 구현체 중 하나인 TwoSideBlockTrapExample의 벽 움직임을

구현된 Multiplay 상에서의 Character 출입 인식 함수들로 교체 작업을 진행했습니다.

 

하지만 잘 작동할것만 같았던 기능은 RPC 함수를 사용했음에도 벽이 Server에서만 움직이고,

Client에서는 전혀 움직이지 않고 있습니다.

 

이 부분을 내일 집중적으로 해결하고, 해결이 되는대로 다른 두 구현체도 이와 같은 방식으로 기능을 변경하고자 합니다.

그리고 운이 좋은건지 나쁜건지, 대부분의 Puzzle은 BlockTrap을 사용하고 있습니다.

때문에 내일 BlockTrap을 완성하면 Puzzle 기능 완성까지도 꽤 가까워집니다.

 

이래저래 시간이 오래 걸릴 것 같은 기분이 다분하지만, 가능하면 기한 내로 끝내보도록 하겠습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.09 개발일지  (0) 2020.07.09
20.07.08 개발일지  (0) 2020.07.08
20.07.06 개발일지  (0) 2020.07.06
20.07.05 개발일지  (0) 2020.07.05
20.07.04 개발일지  (0) 2020.07.04

오늘은 외식을 하느라 개발 시간이 반토막이 나버렸습니다.

 

오늘은 Multiplay상에서 Character의 출입이 인식되도록 구현을 완료했습니다.

어제 일지를 쓰고나서 자려고 누우면서 문뜩 출입을 파악하는 변수들을 모두 Replicated 하고

RPC함수로 Queue 출입을 관리해야 할 것 같았는데

오늘 실제로 구현해보니 예상이 정확히 들어맞았습니다.

거의 두번. 아니 세번을 한달씩 시간을 꼴아박으며 얻은 교훈이 드디어 몸에 습득이 되어가는 것 같습니다.

 

남은 시간에 BlockTrap을 수정하다가 외식과 운동으로 남은 하루를 다 보냈습니다.

내일 열심히 해도 잘 될지 모르겠습니다.

화요일 전에 끝내면 Trap을 과제에 포함할까 했는데 이를 수요일까지 좀 두고볼까 합니다.

 

오버워치 리그도 이번주 휴일이고 열심히 하면 될것도 같습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.08 개발일지  (0) 2020.07.08
20.07.07 개발일지  (0) 2020.07.07
20.07.05 개발일지  (0) 2020.07.05
20.07.04 개발일지  (0) 2020.07.04
20.07.03 개발일지  (0) 2020.07.03

일지를 쓰기 시작한 이후로 일주일 내내 개발을 한 적이 없습니다.

항상 일요일은 쉬는 날로 잡았고, 아무리 바빠도 이 날은 개발하지 않았습니다.

그 이유는 일주일 내내 개발을 하면 7일째부터 능률이 반토막이 나고, 의욕도 그만큼 떨어지기 때문이었습니다.

오늘 정말 오랜만에 일주일 내내 개발을 하였고, 역시 능률이 나지 않았습니다.

 

우선 THActorBase를 상속받아 따로 구현되던 여러 Trap들의 공통된 기능들에 대한 선언을 THTrapBase에 옮기고,

상속 관계를 수정하여 모든 Trap들이 THTrapBase를 상속받도록 하였습니다.

 

그리고 Character와의 Collision에 따른 이벤트 발생도 선언을 해두었고, 약간의 테스트를 해보았습니다.

방식은 Replicated 된 Queue 두개를 두고, 하나는 Character가 Trap의 Area 안에 들어올 때 담는 역할을,

다른 하나는 Trap이 Activate 될 때 첫번째 Queue의 내용을 두번째 Queue에 복사합니다.

Trap의 Activate 조건은 첫번째 Queue 길이가 요구치보다 크거나 같을 경우입니다.

따로 메모리를 두지는 않지만, 이 부분은 Semaphore를 따라가고 있습니다.

 

우선은 Character가 들락날락 하는 것에 대한 인식은 하고 있는 상태입니다.

내일은 그 뒤의 조건부를 제대로 수정하여 Multiplay 상에서 제대로 Character의 출입이 인식되도록 하고자 합니다.

그 뒤에 따로 구현 했던 기능들을 새 함수로 이전할 계획입니다.

 

하루면 될 줄 알았던 일이 하루 넘어가는 것으로 보아

Trap 부분만 어느정도 손봐도 목요일 쯤이 될 가능성이 높은 것 같습니다.

수요일 0시를 기준으로 그 전에 Trap 문제가 해결이 되면 Puzzle도 시도를 해보고,

그렇지 않다면 그 시점에서 내용을 정리해서 과제를 제출하고자 합니다.

 

과제 제출한 후에는 일주일~열흘 가량은 본 프로젝트는 일주일에 1, 2회만 하고

나머지는 전공책 읽기와 알고리즘 문제 풀기를 할 생각입니다.

이는 여태까지 하지 못했던 것을 보충하기 위함입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.07 개발일지  (0) 2020.07.07
20.07.06 개발일지  (0) 2020.07.06
20.07.04 개발일지  (0) 2020.07.04
20.07.03 개발일지  (0) 2020.07.03
20.07.03 개발일지 2  (0) 2020.07.03

오늘은 길고 길었던 Climb 기능을 일단락 하게 되었습니다.

 

우선 어제 가장 문제가 되었던 Top Exit에 대해 3가지 해결법을 준비했습니다.

1. Top Exit 시 Teleport

2. Top Exit 시 모든 Collision을 제거

3. 이동키에서 손을 뗄 시 그 즉시 정지(관성도 없음)

 

이 중 3번을 함으로써 해결법이 가시권에 들어왔습니다.

해결법은 MaxFlySpeed와 BrakingDecelerationFlying였습니다.

MaxFlySpeed는 MOVE_Fly 상태에서의 최대 속도를, BrakingDecelerationFlying은 비 이동 시 가속도를 지칭합니다.

즉, MaxFlySpeed가 50이고 BrakingDecelerationFlying이 50이면 1초동안 감속운동을 하며 멈추게 되는 것입니다.

저는 BrakingDecelerationFlying을 MaxFlySpeed의 10배로 잡아 0.1초만에 바로 정지하도록 만들었습니다.

 

이렇게 하고 나자 비로서 원하던 것이 보였습니다.

Exit From Top의 Notify는 정상 작동을 하고 있었습니다.

심지어 Animation이 벽에 막혀 재생되지 않은 것이 아니었습니다.

앞이 막혀 있다면 뒤로 밀려서 재생이 되었습니다.

그 뒤는 Input을 제한하고, ExitClimb를 지정하면서 실질적인 움직임을 맞추는 것이었습니다.

 

하지만 결국 Climb Animation 이후 실질적으로 벽에 오르지 못하는 문제에 직면했고,

이 부분을 Teleport로 해결했습니다.

Collision으로 해결하지 않은 이유는 Animation이 벽에 막혔을 때 재생되지 않은 것이 아니라, 

뒤로 밀려서라도 재생이 되기 때문이었습니다.

어차피 Character 위치는 재조정을 해야 했기 때문에, 굳이 Collision을 건들지 않고 Teleport만 사용했습니다.

 

이전에는 Teleport를 할 때 Character가 붕 뜨는 것 같아서 이를 꺼려했습니다.

하지만 이는 처음 테스트 한 Rope의 경우였고, Ladder와 Wall에서는 그렇게까지 어색하게 보이지는 않았습니다.

이는 Rope의 Animation이 더 위쪽을 잡고 올라가는 형식이라 그런 것으로 판단됩니다.

때문에 현재 상황에서는 고칠 수 없는 문제라 판단하고 이슈에서 제거했습니다.

 

많은 문제들이 해결되었지만 아직 완벽한 것은 아닙니다.

Wall은 Enter/Exit From Bottom과 Climb Up/Down Animation이 없어서 임시로만 해놓은 상태입니다.

때문에 기능도 완벽하게 작동하지 않습니다.

 

또한 Teleport 할 때 Rotation이 정상적으로 적용되지 않습니다.

Rotation을 잘못 계산한 것인지는 잘 모르겠지만,

여러 방안을 시도 했음에도 Teleport 할 때 뒤를 돈 채로 이동하지 않고 있습니다.

때문에 Enter From Top도 모든 Climb에 대해 정상적으로 작동하지 않고 있습니다.

 

그럼에도 이 기능을 이쯤에서 멈춘 이유는 과제로 제출해야하기 때문입니다.

현재 구현된 기능 중 문제가 발생하는 기능들이 존재하기 때문에 이 부분을 먼저 구현하고자 합니다.

 

그래서 다음 진행중인 일은 Trap의 MultiPlay 상에서의 기능 작동입니다.

Trap 자체는 사실 Character가 들어와 있으면 기능이 작동하기만 합니다.

하지만 그 구조가 졸속이다 보니 MultiPlay에서 한 Character로 인해 발동된 Trap이

다른 Character의 InRange로 인해 해제가 되기도 합니다.

또한 이 방식은 Trap이 1명의 Character에게만 반응하게 되어있습니다.

 

이 문제들을 해결하기 위해 Character의 InRange를 Semaphore나 Queue로 구현을 하고자 합니다.

그리고 이에 따라 ATHActorBase에서 각자 따로 구현되었던 ATH-Trap들을

ATHTrapBase 하위 Actor들로 통합하려 합니다.

오늘은 생성을 하고, 기존의 Trap들에게 있는 공통적인 선언부분만 선언해둔 상태입니다.

 

우선은 공통 기능을 구현한 뒤 상속 관계를 수정하여 무사히 Build를 하는 것이 내일 첫 목표입니다.

그 다음에는 구현한 기능을 개선하고자 합니다.

하루만에 하기 힘들 수 있지만, 내일 개발이 끝나고 시간이 남는다면 BreakPuzzle을 먼저 수정해보려 합니다.

 

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.06 개발일지  (0) 2020.07.06
20.07.05 개발일지  (0) 2020.07.05
20.07.03 개발일지  (0) 2020.07.03
20.07.03 개발일지 2  (0) 2020.07.03
20.07.03 개발일지  (0) 2020.07.03

Notify가 호출되지 않은 이유는 이것을 받기 위해서는 Character가 아니라

AnimInstance에서 Delegate를 생성해야 하기 때문이었습니다.

 

AnimInstance에 Notify 이벤트를 생성하고 나서, 이벤트가 호출되는 것을 확인했습니다.

다만 Top에서는 발생하지 않았는데, 구조적 문제보다는 다른 원인 때문이라 생각합니다.

 

현재는 두가지 원인을 예측합니다.

1. 이전부터 Top Exit Animation은 정상재생 되지 않고 있었다.
벽이 있을 경우 막히기 때문에 끝까지 Animation이 재생되지 않아 Notify가 발생하지 않았다.

2. Exit 한 이후로 계속해서 Character가 움직이면서 Notify에 도달하지 못했다.

 

이를 위해 3가지 방안을 생각 중입니다.

1. Top Exit 시 Teleport를 한다.

2. Top Exit 시 Character의 모든 Collision을 없애서 벽을 통과 할 수 있도록 한다.

3. 이동 키에서 손을 뗼 경우 이동속도는 물론 관성까지 모두 0으로 처리하여 완벽히 멈추도록 한다.

 

이 중 3번은 무조건 적용이 되어야 할 사항입니다.

그렇지 않으면 이벤트가 중복으로 호출될 수 있기 때문입니다.

1번은 한번 시도했던 방안이지만, 실제로 적용하면 Character가 매우 붕 뜨기 때문에 어디까지나 차선책입니다.

결국 2번이 제대로 작동 되느냐에 따라 완성도가 달라질 것 같습니다.

 

우선 내일은 3번부터 적용을 하고, Notify 발생 여부를 확인해가며 1번과 2번 중 적절한 것을 먼저 시도할 예정입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.05 개발일지  (0) 2020.07.05
20.07.04 개발일지  (0) 2020.07.04
20.07.03 개발일지 2  (0) 2020.07.03
20.07.03 개발일지  (0) 2020.07.03
20.07.02 개발일지  (0) 2020.07.02

+ Recent posts