Skip to content

Commit

Permalink
docs: portfolio
Browse files Browse the repository at this point in the history
  • Loading branch information
DYGames committed Oct 28, 2023
1 parent 0a94905 commit 71b88c5
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 37 deletions.
Binary file modified articles/images/portfolio/didsl.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added articles/images/portfolio/jscallback.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added articles/images/portfolio/manualdi.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed articles/images/portfolio/roompager.png
Binary file not shown.
Binary file added articles/images/portfolio/roomplayer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added articles/images/portfolio/scrollpager.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed articles/images/portfolio/youtubeiframe.png
Binary file not shown.
92 changes: 55 additions & 37 deletions articles/portfolio.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,61 +14,64 @@
- ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ฐœ๊ฒฌํ•œ ์Œ์•…์„ ์Šคํฌ๋žฉํ•˜์—ฌ ์ €์žฅ
- ์Šคํฌ๋žฉํ•œ ์Œ์•…์€ ์œ ํŠœ๋ธŒ ์žฌ์ƒ๋ชฉ๋ก์œผ๋กœ ์ถ”์ถœ ๊ฐ€๋Šฅ
- ์Œ์•… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ณต
- <video width="157" height="345" controls autoplay loop muted>
<source src="../articles/images/portfolio/explorer.mov" type="video/mp4">
</video>
<video width="157" height="345" controls autoplay loop muted>
<source src="../articles/images/portfolio/scrap.mov" type="video/mp4">
</video>
<video width="157" height="345" controls autoplay loop muted>
<source src="../articles/images/portfolio/comment.mov" type="video/mp4">
</video>
### ๐Ÿค™ ์—ญํ• 
#### ์‹œ์—ฐ
- <div style="display: flex; justify-content: space-evenly;">
<video width="157" height="345" controls autoplay loop muted>
<source src="../articles/images/portfolio/explorer.mov" type="video/mp4">
</video>
<video width="157" height="345" controls autoplay loop muted>
<source src="../articles/images/portfolio/scrap.mov" type="video/mp4">
</video>
<video width="157" height="345" controls autoplay loop muted>
<source src="../articles/images/portfolio/comment.mov" type="video/mp4">
</video>
</div>
<br>
### ๐Ÿค™ ์—ญํ• 
- ์ดˆ๊ธฐ ์•„์ด๋””์–ด, ์•ฑ ์ „์ฒด ํ๋ฆ„์„ ๊ธฐํš
- ์•ˆ๋“œ๋กœ์ด๋“œ ์•„ํ‚คํ…์ณ ๊ตฌ์กฐ, ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„
## ๊ตฌํ˜„
### Youtube IFrame API๋ฅผ ์ด์šฉํ•ด ์˜์ƒ์„ ์žฌ์ƒํ•˜๋Š” YoutubeRoomPlayer ๊ตฌํ˜„
### 1. Youtube IFrame API๋ฅผ ์ด์šฉํ•ด ์˜์ƒ์„ ์žฌ์ƒํ•˜๋Š” YoutubeRoomPlayer ๊ตฌํ˜„
๊ธฐ์กด์˜ ๊ธฐํš์€ HLS ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•œ ์˜์ƒ์„ ์ง์ ‘ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•˜๋ ค๊ณ  ํ•˜์˜€์œผ๋‚˜, ์œ ํŠœ๋ธŒ์˜ ์Œ์•… ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๊ณ  ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด WebView์œ„์—์„œ Youtube ์˜์ƒ์„ ์žฌ์ƒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
<br>
<br>
**์˜์ƒ ํ”Œ๋ ˆ์ด์–ด ์ธํ„ฐํŽ˜์ด์Šค**
<br>
<img style="width: 600px" src="../articles/images/portfolio/didsl.png" alt="..."></img>
<img style="width: 50%; margin-left: auto; margin-right: auto; display: block;" src="../articles/images/portfolio/roomplayer.png" alt="..."></img>
<br>
WebView์—์„œ Youtube IFrame API ์ œ์–ด๋ฅผ ์œ„ํ•œ API ๋กœ๋”ฉ, ์˜์ƒ ๋กœ๋”ฉ, ์žฌ์ƒ, ์ผ์‹œ์ •์ง€๋“ฑ์„ JS๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด ์˜์ƒ์„ ์บ์‹ฑํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์˜์ƒ ๋กœ๋”ฉ ๋“ฑ์˜ ์ƒํƒœ์— ๋Œ€ํ•ด Kotlin๊ณผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ์–ด ์•ฑ ๋‹จ์—์„œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
<br>
<img style="width: 600px" src="../articles/images/portfolio/youtubeiframe.png" alt="..."></img>
<br>
### ์ˆํผ ํ˜•์‹ ํŽ˜์ด์ € ๋ทฐ [RoomPager](https://github.com/DYGames/RoomPager) ๊ตฌํ˜„
<img style="width: 50%; margin-left: auto; margin-right: auto; display: block;" src="../articles/images/portfolio/jscallback.png" alt="..."></img>
### 2. ์ˆํผ ํ˜•์‹ ํŽ˜์ด์ € ๋ทฐ [RoomPager](https://github.com/DYGames/RoomPager) ๊ตฌํ˜„
#### ๊ธฐ์กด RecyclerView, ViewPager๋“ฑ์œผ๋ก  ์ˆํผ ํ˜•ํƒœ์˜ ํŽ˜์ด์ง• ๋ทฐ ๊ตฌํ˜„์ด ๋ถˆ๊ฐ€
- ๋ทฐ ๋ฆฌ์‚ฌ์ดํด๋ง, ์˜์ƒ ๋ฏธ๋ฆฌ ๋กœ๋”ฉ, 4๋ฐฉํ–ฅ ํŽ˜์ด์ง•, ๋ถ€๋“œ๋Ÿฌ์šด ํŽ˜์ด์ง•์„ ์ œ๊ณตํ•˜๋Š” **RoomPager** Custom View ๊ฐœ๋ฐœ
- Paging ์ƒํƒœ์— ๋”ฐ๋ผ ํ™”๋ฉด ๋ฐ–์˜ YoutubePlayer ์กฐ์ž‘ํ•˜์—ฌ ์ตœ์ ์˜ ์ˆํผ ๊ฒฝํ—˜ ์ œ๊ณต
## ๐Ÿ› ๏ธ Troubleshooting
### ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ๋„๋ฉ”์ธ ๋กœ์ง ๋“ฑ์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ ๋กœ๊ทธ ํ™•์ธ
- ๊ธฐ์กด ์ฝ”ํ‹€๋ฆฐ์˜ Result ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•œ LogResult ํด๋ž˜์Šค ๊ตฌํ˜„
- Success, Failure ์ƒํ™ฉ์—์„œ ์„ค์ •ํ•œ ์ฑ„๋„ (์ฝ˜์†”, Firebase)๋“ฑ์— ์ž๋™์œผ๋กœ ๋กœ๊ทธ ์ถœ๋ ฅ
### ์ž๋™ DI ๊ตฌํ˜„
### 1. ์ž๋™ DI ๊ตฌํ˜„
๊ธฐ์กด์—๋Š” ์ˆ˜๋™์œผ๋กœ ๊ฐ์ฒด ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋”ฐ๋กœ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
```kotlin
class RepositoryProvider(context: Context) {
private val localDataSourceProvider = LocalDataSourceProvider(context)
...
val roomRepository = DefaultRoomRepository(remoteDataSourceProvider.roomRemoteDataSource)
...
}
```
<br>
<br>
<img style="width: 50%; margin-left: auto; margin-right: auto; display: block;" src="../articles/images/portfolio/manualdi.png" alt="..."></img>
<br>
๊ฐ ๊ณ„์ธต์˜ ๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ ธ์„œ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
Reflection์„ ์ด์šฉํ•ด ๊ฐ์ฒด ์ƒ์„ฑ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ž๋™์œผ๋กœ ์˜์กด์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์ž๋™ DI๋ฅผ ๊ฐœ๋ฐœํ•ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
Singleton, Qualifier, Lifecycle๋“ฑ์˜ ๊ธฐ๋Šฅ๋„ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜๋„๋ก ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ดˆ๊ธฐ ์˜์กด ๊ด€๊ณ„๋ฅผ DSL๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
### ์„œ๋ฒ„ ๋‹จ์˜ ์Œ์•… ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„œ๋น„์Šค ๋ ˆ์ด์–ด ์ข…์†
<br>
<br>
<img style="width: 50%; margin-left: auto; margin-right: auto; display: block;" src="../articles/images/portfolio/didsl.png" alt="..."></img>
### 2. ์„œ๋ฒ„ ๋‹จ์˜ ์Œ์•… ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„œ๋น„์Šค ๋ ˆ์ด์–ด ์ข…์†
์Œ์•… ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŒ€ ์ „์ฒด๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์— ์†ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ์กด์— ๊ตฌํ˜„์ƒ์˜ ํŽธ์˜๋กœ Spring์˜ Service ํด๋ž˜์Šค ์•ˆ์— ๊ตฌํ˜„๋˜์–ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ๊ฐœ์„  ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ํšŒ์˜๋ฅผ ๋‹ค์ˆ˜ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ ์ผ์ •์ƒ์˜ ๋ฌธ์ œ๋กœ ๊ฑฐ์ ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ตญ ์ง์ ‘ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์ธ Repository ์ฐธ์กฐ๋ฅผ ๊ฐ–๋Š” ๋„๋ฉ”์ธ ์„œ๋น„์Šค์ธ RoomRecommender๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด PR์„ ๋ณด๋‚ด๊ณ , ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋“ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
<br>
<img style="width: 600px" src="../articles/images/portfolio/ioc.png" alt="..."></img>
<img style="width: 75%; margin-left: auto; margin-right: auto; display: block;" src="../articles/images/portfolio/ioc.png" alt="..."></img>
### 3. ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ๋„๋ฉ”์ธ ๋กœ์ง ๋“ฑ์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ ๋กœ๊ทธ ํ™•์ธ
- ๊ธฐ์กด ์ฝ”ํ‹€๋ฆฐ์˜ Result ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•œ LogResult ํด๋ž˜์Šค ๊ตฌํ˜„
- Success, Failure ์ƒํ™ฉ์—์„œ ์„ค์ •ํ•œ ์ฑ„๋„ (์ฝ˜์†”, Firebase)๋“ฑ์— ์ž๋™์œผ๋กœ ๋กœ๊ทธ ์ถœ๋ ฅ
# โ™ป๏ธ [RoomPager (Open Source)](https://github.com/DYGames/RoomPager)
`Android` `Kotlin` `Custom View`
### ์•ˆ๋“œ๋กœ์ด๋“œ 4๋ฐฉํ–ฅ ๋ฆฌ์‚ฌ์ดํด๋ง ํŽ˜์ด์ € ๋ทฐ | [๊ฐœ๋ฐœ๊ธฐ](https://dygames.github.io/article.html?article=Android%EC%97%90%EC%84%9C%204%EB%B0%A9%ED%96%A5%20%EC%9E%AC%ED%99%9C%EC%9A%A9%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%ED%8E%98%EC%9D%B4%EC%A7%95%20%EB%B7%B0%20%EB%A7%8C%EB%93%A4%EA%B8%B0%20+%20Youtube%20WebView%20%EC%9E%AC%EC%83%9D.md)
Expand All @@ -78,15 +81,17 @@
- 4๋ฐฉํ–ฅ ์Šคํฌ๋กค๋กœ ์ œ์Šค์ณ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
- Maven Repository์— ๋ฐฐํฌ
## ๐Ÿ› ๏ธ Troubleshooting
### [๋ฆฌํŒฉํ„ฐ๋ง] ์–‘ ๋ฐฉํ–ฅ ์Šคํฌ๋กค ๋ทฐ์— ๋Œ€ํ•ด ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ
### 1. [๋ฆฌํŒฉํ„ฐ๋ง] ์–‘ ๋ฐฉํ–ฅ ์Šคํฌ๋กค ๋ทฐ์— ๋Œ€ํ•ด ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ
Android์˜ ScrollView, HorizontalScrollView๋Š” FrameLayout์„ ์ƒ์†๋ฐ›์•„ scrollTo()์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
<br>
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ์Šคํฌ๋กค๋ทฐ์—์„œ ๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ์ถ”์ถœํ•˜์—ฌ ScrollPager๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ถ”์ƒํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
<br>
๊ทธ๋ฆฌ๊ณ  ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” VerticalScrollPager, HorizontalScrollPager๋ฅผ ๋งŒ๋“ค์–ด RoomPager์—์„œ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ์–ด ์‚ฌ์šฉํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
<br>
<img style="width: 600px" src="../articles/images/portfolio/roompager.png" alt="..."></img>
### [์ตœ์ ํ™”] ๋ทฐ ์žฌ์‚ฌ์šฉ์‹œ ์œ„ํ•ด 9๊ฐœ์˜ ๋ทฐ๋ฅผ ๋™์‹œ์— ๋กœ๋”ฉํ•˜์—ฌ ๊ณผ๋ถ€ํ•˜ ๋ฐœ์ƒ
<br>
<img style="width: 50%; margin-left: auto; margin-right: auto; display: block;" src="../articles/images/portfolio/scrollpager.png" alt="..."></img>
<br>
### 2. [์ตœ์ ํ™”] ๋ทฐ ์žฌ์‚ฌ์šฉ์‹œ ์œ„ํ•ด 9๊ฐœ์˜ ๋ทฐ๋ฅผ ๋™์‹œ์— ๋กœ๋”ฉํ•˜์—ฌ ๊ณผ๋ถ€ํ•˜ ๋ฐœ์ƒ
๊ธฐ์กด์— 4๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ๋ถ€๋“œ๋Ÿฌ์šด ํŽ˜์ด์ง•์„ ์œ„ํ•ด 9๊ฐœ ๋ทฐ์— ์˜์ƒ์„ ์บ์‹ฑํ•˜๋ฉฐ ์žฌํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ด๋•Œ ๋งŽ์€ ์–‘์˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ๊ณผ ๋ทฐ ์ž‘์—…์ด ์ผ์–ด๋‚˜ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง• ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋ทฐ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ์žฌํ™œ์šฉํ•˜๋„๋ก ํ•˜์˜€๊ณ , ๋ทฐ์˜ ๊ฐœ์ˆ˜๋ฅผ 3๊ฐœ๊นŒ์ง€ ์ค„์—ฌ ์„ฑ๋Šฅ์„ **3๋ฐฐ** ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
Expand All @@ -98,11 +103,11 @@
- Oracle DB, Excel๋“ฑ ๊ธฐ์กด ์—ฐ๋™ ๊ธฐ๋Šฅ๋„ ํ˜ธํ™˜๋˜๋„๋ก ์žฌ๊ฐœ๋ฐœ
- ์‹ค์‹œ๊ฐ„ ํˆฌํ‘œ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด DB ํด๋ง ๊ตฌํ˜„
## ๐Ÿ› ๏ธ Troubleshooting
### ๋ฌธ์„œ์™€ ์ธ์ˆ˜์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ
### 1. ๋ฌธ์„œ์™€ ์ธ์ˆ˜์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ
- ๊ธฐ์กด๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ทฐ์™€ ๋กœ์ง ์ž‘๋™์ด ๋ณด์žฅ๋˜๋„๋ก ๊ตฌํ˜„
- VB์„ ํ•™์Šตํ•˜๊ณ , C# Winform์—์„œ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ™•์ธ
- ๊ธฐ์กด ์ฝ”๋“œ ์ฝ์œผ๋ฉฐ C#์œผ๋กœ ์žฌ์ž‘์„ฑํ•˜๋ฉด์„œ, ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ๋„๋ก `๋ณด์ด์Šค์นด์šฐํŠธ ๋ฒ•์น™` ์ค€์ˆ˜ํ•˜๋ฉฐ ์ž‘์„ฑ
### Visual Basic์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์„œ ํ”„๋ฆฐํ„ฐ ์ถœ๋ ฅ ํ•จ์ˆ˜๊ฐ€ C#์—๋Š” ๋ฏธ์ œ๊ณต
### 2. Visual Basic์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์„œ ํ”„๋ฆฐํ„ฐ ์ถœ๋ ฅ ํ•จ์ˆ˜๊ฐ€ C#์—๋Š” ๋ฏธ์ œ๊ณต
- ๋ฌธ์„œ๋ฅผ ํ”„๋ฆฐํ„ฐ์— ์ถœ๋ ฅ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง์ ‘ ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๋ฌธ์„œ ์–‘์‹์„ ์ง€์ •ํ•œ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ์–‘์‹์„ ๋ทฐ์™€ ํ”„๋ฆฐํ„ฐ ์–‘์ธก์— ์ถœ๋ ฅํ•˜๋„๋ก ํ•จ
# ๐ŸŽธ [Tab-share](https://github.com/DYGames/tab-share)
Expand Down Expand Up @@ -159,17 +164,30 @@
### ์‹œ์  ์ „ํ™˜์‹œ ์ž์—ฐ์Šค๋Ÿฌ์šด ํšจ๊ณผ
- Camera์˜ ProjectionMatrix๋ฅผ ๊ฐ€์ ธ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์„ ํ˜• ๋ณด๊ฐ„ ์ˆ˜ํ–‰
- Coroutine์„ ์ด์šฉํ•ด ๋ณด๊ฐ„ ๊ฐ’์„ Camera์— ์ ์šฉ
### Wave ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Unity Coroutine ๋„์ž…
- Coroutine ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ Wave ๊ด€๋ฆฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€
### NavMeshAgent๊ฐ€ ๋ชฉํ‘œ ํƒ€์›Œ์— ๋„๋‹ฌํ•˜๋”๋ผ๋„ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ณต๊ฒฉ์„ ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ
- NavMeshAgent์˜ Stop Distance๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ผ์ • ๊ฑฐ๋ฆฌ ์ด์ƒ ๋„๋‹ฌ์‹œ ๋ฉˆ์ถ”๋„๋ก ์„ค์ •
<iframe width="400" height="225"
src="https://www.youtube.com/embed/feGyPshVzlU">
</iframe>
# ๐Ÿ–ฅ๏ธ [DirectX 2D Game Engine](https://github.com/DYGames/SkillOlympic_Medieval)
`C++` `2D` `DirectX`
## ๋Œ€ํšŒ์—์„œ ๋น ๋ฅด๊ฒŒ ๊ฒŒ์ž„์„ ์ œ์ž‘ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์ž‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
- Cocos2d-x ์—”์ง„์„ ๋ถ„์„ํ•˜์—ฌ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํŠน์ง•ํ•˜๊ณ  ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ƒ
## DirectX 9์œผ๋กœ ์ œ์ž‘๋œ 2D Game Engine
- Tree ๊ตฌ์กฐ์˜ Game Object ๊ด€๋ฆฌ
- ํ™”๋ฉด ์ „ํ™˜์„ ์œ„ํ•œ Scene
```cpp
D3DXMATRIX getMatrix()
{
D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
D3DXMatrixTransformation2D(&mat, nullptr, NULL, &_scale, nullptr, _rotation, &_position);
if (_parent)
mat *= _parent->getMatrix();
return mat;
}
```
- ์ž์‹ Object์˜ Transform Matrix๋Š” ๋ถ€๋ชจ Object์˜ ๊ทธ๊ฒƒ์— ์ข…์†
- Scene ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋˜๋Š” ํ™”๋ฉด
- 2D Sprite Animation
- 2D Sprite Rendering
- Input System
Expand Down

0 comments on commit 71b88c5

Please sign in to comment.