Search
Duplicate
👨🏻‍💻

멘토링 - 김종필 멘토님

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
멘토링후기
Scrap
태그
9 more properties
소개

가벼운 코드 리뷰 및 Unity 로 리펙토링시 고려해야할점

게임 시연 및 코드를 보여드린다.

Q) 게임 맵 구성은 어떻게 되나요?

0101이 2D맵 구성할 때 기본적인 방법 중 하나이다.
특수한 타일들은 a, b, c 등으로 표시 → 42과제랑 똑같다.
3D → 복사본을 미리 준비하고 미리 세팅해서 그려놓고 랜더링을 한다. 수동으로 하기 힘들다면 for문으로

Q) 찾아보니까 script 언어로 lua 를 쓴다고 들었는데 실제 현업에서도 많이 쓰이는 스크립트인지 궁금하다

최근에 입사한 분들의 얘기를 들어보면 lua를 쓴다고 한다. 게임을 개발하는 용도는 아니고 커스텀하는 용도로 사용한다.
이미 만들어진 게임에 커스텀 기능을 넣을때 쓴다. → Unity 에서는 안써보셨다

Q) 지금 코드는 싱글턴을 사용하고 있는데, 실제 개발할때도 싱글턴을 자주 사용하는지 + 객체 지향언어에서는 싱글턴 사용을 지양한다고 하는데, 어떻게 생각하시는지

조금 복합적이다...
싱글턴을 좋아하지 않는다! 디버깅이 어렵다!
→ 흐름으로 디버깅을 하는데 싱글턴은 급발진 느낌이다.. 아무때나 가져올 수 있어서 맥락이 없다. 작은 사이즈 게임에서는 괜찮을 수 있지만, 프로젝트가 커지면 커질수록 흐름을 따라가는 처리에서 어려움이 있다.
싱글톤이 유용한 경우는 객체들끼리의 의존성이 없이 단독적으로 활용되는 경우에는 유용하다! 하지만 이정도는 static 메서드로 처리할 수 있지 않다
결론 : 남용하지 말자

Q) 싱글턴 패턴을 사용하지 않는다면, 어떤식으로 객체들이 서로를 접근하는게 좋은것인지 추천하는 디자인 패턴이 있는지

유니티에서는 씬안에 게임 오브젝트가 항상 있는데, 기본적으로 트랜스폼이라는 함수를 가지고 있다. 게임이 실행되는 중에 항상 가지고 있다. script가 처리해준다.
게임 오브젝트의 스크립트들이 getComponent()와 같은 함수로 메서드를 가져온다.
// 싱글톤은 지양해야함!
// 디버깅이 어렵다
// 주소값들이 흐름에 따라서 흘러가는걸 디버깅 해야하는데,
// 그냥 맥락없이 가져와버리는 느낌
// 아예 안쓰지는 않지만, 흐름을 따라는처리에서는 싱글턴을 쓰지 않는다.
// 유니티 : 게임 오브젝트가 transform 을 가지고있다. -> 항상 랜더링하면서 가지고있다. -> script 가 들어가서 동작함
// 게임 오브젝트를 가져오는 getComponenet()로 컴포넌트(ex) transform,collider) 끼리 서로 연결된다...
// 유용한 경우 : 객체들 끼리 의존성 없이 단독적으로 돌아가는 경우에는 유용하다
// 근데 굳이? static 함수로 구현할수도있다
// 사바사다... 그러나 너무 남용하지는 말것

Q) 비트 계산를 활용해서 코딩을 하였는데, 실제 현업에서 비트 계산을 많이 쓰는지

비트연산을 현업에서는 자주 쓰지 않는다. C언어에서는 즐겨쓰는 방식이긴 한데, 이런걸 처리하는 속도가 빨라 봤자 차이가 안난다. 그래서 성능적인 코드보다는 유지보수를 위한 클린코드를 짜는 것이 더 중요한 포인트이다. unity, C#에서는 enum을 많이 쓴다.
상태변화 체크를 하는게 게임 만드는 곳에서는 유한상태머신이라는게 있다.
캐릭터의 상태를 미리 정해두고 순서도를 짜두고 상태들이 계속 바뀌어갈 수 있도록 지원해준다.
유니티에서는 이걸 지원해주는 툴이 있다.
// 상태 체크/변화 하는걸 "유한상태머신"
// 캐릭터의 상태를 정해놓고, 조건에 따라 상태를 변화해준다.
// 미리 순서도같은거 짜놓고, 그안에서 상태들이 돌아가게끔한다
// Unity 안에서 이걸 해주는 툴이 있어서 이걸로 게임 캐릭터 상태를 만든다.

Q) 지금까지 했던 행동들을 무식하게 연결리스트에 다 저장하고있는데, Untiy 에서도 동일한 방식으로 구현하는게 좋을지, 아니면 괜찮은 방법이 있을지 ...

유니티에는 플레이상태를 기록하는 모드가 있다. 그걸 그대로 재생을 시키거나 역재생을 시키면 된다.
Scene 을 나눠서 순행/역행 나눠서 돌리게..
Playmode → Record 기능..

Q) 유니티 내장 애니메이션 툴이 있던데, 이걸 사용하는게 좋은지, 그냥 이미지 여러장으로 애니메이션으로 하는게 좋은지..? 일반적으로 어떤식으로 하는지...

보통은 3d모델링 툴으로 미리 상태에대한 애니메이션을 완성시켜놓고 유니티에서는 재생만 한다.
2d 도 마찬가지..

Q) 유니티 내장 애니메이션 툴을 사용하는 이유? 보통 유니티 애니메이션 툴을 전문으로 사용하는 애니메이터가 따로 있는건지 ..?

유니티 내부에서 만드는 기능도 있다. 스크립트로 재생만 하게 코드를 짜는 것

Q) 요즘 모바일 화면 크기가 다 다른데 기준으로 잡으시는 화면 비율이 있으신지 아니면 모든 화면 비율을 다 고려해야하는건지 + 태블릿같은것은 어떻게 하시는지

일반적으로 모든 화면 비율에 맞추지는 않고, 디바이스에 맞는 해상도까지 맞춰주는 세팅이 있다.
strech모드, 디바이스의 비율에 맞춰주는 세팅
특수한 경우에만 조금 처리를 하고 기본적으로는 자동으로 해상도 맞춰서 쓴다.

Q) Unreal과 다른 Unity만의 장점이 혹시 있는지..? or Unity 를 쓰시는 이유가 있으신지

간접적으로 들은 이야기) 게임 산업에서 오신 분들이 있다 → 면접볼 때 두개 비교 질문을 한다.
언리얼은 정해진 틀이 있고
유니티는 틀없이 내가 하고싶은대로 만드는 느낌
만드는것에 대한 제약차이 / 범용성 - 상대적으로 유니티를 많이 쓴다
유니티가 레퍼런스가 많다. 유니티가 언리얼보다 성능이 떨어진다는 선입견이 있지만 막상 돌려보면 준수한 성능이 나온다.
AR 관련된 지원은 유니티가 훨씬 잘 되어있다!
iOS에서 나온 Facetracking하는 sdk가 있는데 유니티 예제는 있는데 언리얼은 없다...

Q) 반대로 Unity 를 쓰면서 한계를 느껴보셨는지..

유니티는 cross-platform 개발툴이다. 빌드해서 어디에 넣을지 선택지가 엄청많다. PC, iOS, xbox 등등..
이게 장점이면서 한계이다.
한가지 플렛폼만 하면 좋은데, 여러 플렛폼을 지원하려다보니까, 생각해야할게 점점 많아진다
결국 플랫폼 별로 예외를 두고 만들게되다보면, 그냥 native 를 쓸걸 그랬나...
하이브리드 앱의 한계
결국 빌드를 두번 돌려서 따로 뽑게 되는 경우가 생긴다.
그래도 단점을 커버할 수 있는 게임 엔진이 있으니 좋다!
플랫폼이 고정이면 고민해결~̆̈~̆̈!

Q) 코드 에디터로 어떤걸 쓰시는지..?

visual studio!!
visual studio code 가 아님 → 유니티 깔면 자동으로 visual studio 가 깔리고 그냥 이거 쓰게된다!
굳이 귀찮게 vs code 쓸 필요가 없다..
mono 가 .NET 오픈 소스였는데 갑자기 유니티가 잘되니까 마소가 지원해주는 느낌...
마소에서 유니티 지원이 빵빵하다

Q) Unity 로 개발할 때, 깃을 활용하시는지..? 이미지나 3d 모델 파일들은 무거운데 버전을 어떤식으로 관리하시는지..

깃을 쓴다! 유니티 개발자는 git lfs 세팅부터 한다.
git LFS(Large File Storage) → 이게 컴 파일도 커버가 된다.

Q) branch는 어떤식으로 나눠서 쓰시는지..?

개발 규모와 인원에 따라 다르다. Git flow 변형 형태를 사용한다. 4개, 5개정도를 유지하면서 사용한다.
dev 에서 수정된 내용 가져오고 싶으면 그냥 merge 쓴다 or rebase 쓴다.
원하는 log 만 골라서 가져올수 있다 → 정리하면서 병합할수있긴하는데 log 를 숨기니까 위험
꼬이니까 git flow 를 잘 확인해보면 좋다 + 관리하는 브랜치는 깨끗하면 된다.
github flow 도 있다. 브랜치끼리 병합하는 방식도 있다.

메타 버스/AR/디지털 트윈 관련 궁금한점

Q) 앞으로의 AR 산업에 대해서 어떻게 생각하시나요..?

지금까지 AR 이라면 인식이 포켓몬고 정도, 캐릭터 얼굴 인식 정도?
메타버스를 통해서 마케팅이 잘되서 AR 이 잘 됐다!
소프트웨어를 잘 만드는것도 중요하지만, 하드웨어 기술도 잘 만들어져야한다.
하드웨어가 발전해야 소프트웨어가 빛을 보게되기도 한다
인공지능과 비슷하게 발전해오는느낌
AR 를 제대로 보여줄수있는 전용 기기가 없으니까
제대로 체험할 수 있는 전용 기기가 등장하면 붐이 오지 않을까... (애플 글래스 같은거)
AR → 컴퓨터 비전(하드웨어 사용 depth 카메라, 2개 카메라로 공간 분석 등) → 어플리케이션 레벨 개발
그래도 그나마 홀로랜즈라는게 있다 → 산업 전문가용
→ 11월에 홀로랜즈 멘토특강 재밌을듯!!

Q) 실제로 디지털 트윈에 대한 수요가 얼마나 있는지..?

스마트 펙토리, 전시장, 시설물 관리 이런쪽에서 수요가 있다
스마트 펙토리가 스마트 하지 않아서 현장에 가야할일이 있는데, 이걸 디지털 트윈으로 확인한다 → 수요가 확실함
최근에 unity 행사를 했는데 디지털 트윈, 산업용 툴 광고가 늘었다. unity에서도 산업 방향에 맞게 흐름을 많이 바꿨다. 게임 이외에 여러가지를 제공하기 시작했다.

Q) 메타 버스가 앞으로 얼마나 흥할거라고 생각하나요..?

실제로 있었던 컨샙인데, 갑자기 유행하니까 이게 거품인지 아닌지 아직은 알 수 없다...
그냥 게임에 이름만 붙인거같기도하고.. 조금 애매하다..
현장에서 같은 가상의 디지털 모델을 같이 볼 수있는 AR 메타버스를 생각하고있다

AR 개발자는 무엇을 하나요?

Q) AR 의 핵심 기술 원리를 이해하고 구현해야하나요..?

컴퓨터 비전쪽 SDK를 연구개발 (연구원쪽) → 카메라에서 입력된 픽셀 정보를 어떻게 처리해야 실제 공간에서 진짜 처럼 보이는거처럼 계산할 수 있는가 (핵심기술원리) → 대학원
구현하는 방법을 깊게 알지 않아도, SDK 를 잘 써서 앱을 개발하는쪽도 있다. → 멘토님 포지션

Q) 스마트폰은 기종별로 성능이 크게 차이나는데, 보통 어느정도 기종까지 잘 돌아가도록 하는지..? Target device 를 정하는 기준이 있는지

1.
가장 최신 출시된 스마트폰을 타겟으로하고,
2.
메모리 용량이 많은걸 선호하고
3.
depth 카메라 달려있는 기종을 선호한다 → 사실 별로 없다 ios pro 모델, 갤럭시 ultra
depth 카메라로 정밀한 동작을 쓴다 → 이 기능이 있는 기종에서만 정밀하게 계산
성능이 안좋은 폰에서 어디까지 ..?
오레오 까지는 지원하는걸로 (3년전 모델)
그 밑은 동작은 하지만, 원활하게 돌아가는건 보장은 못한다
애초에 제공되는 SDK 에서 기종이 정해져있기 때문에 이걸 기준으로 삼는다
가이드가 다 있다

Q) 모바일에서 최적화를 위해서 어떤 기법들이 들어가게 되는지...?

코드 로직상에서의 최적화는 사실 별로 없다
무한루프로 빠지지 않게만 짜면 괜찮다
왠만하면 몇 프레임안으로 다 돌아가니까, 쓸데없는 최적화는 잘 하지 않는다.
보통 랜더링쪽에서 부하가 걸리고 여기서 최적화가 필요하다
3D 모델의 폴리곤 수가 많다거나 하면 메모리를 많이 써버리면, Unity 가비지컬렉터가 제대로 메모리 해제 안해주면 오류나서 죽고 그런다
그래서 리소스 최적화가 주가 된다. → 필요할떄만 리소스를 로딩하고 최적화한다
나중에라도 보고 쉽게 수정하고 읽을 수 있는 코드를 짜는게 더 중요하다!!

Q) 요즘은 브라우저 성능이 올라가면서 웹에서도 3D랜더링을 하는데, 이때도 Unity 를 쓰는지 아니면 웹 전용 3D 엔진을 따로 쓰시는지

WebGL → 꽤 괜찮은 친구
유니티도 웹 임베드할때 저거 쓴다
근데 애초에 웹쪽으로는 잘 안한다 → 산업용으로 개발하고 현장에서 쓰이는거 개발하다보니까, 모바일 디바이스를 중심으로 개발한다
remote : 현장 사무실 전문가 가 서로 통신 할 수 있게 할때는 웹 모바일 이럴때는 쓰지만,
웹으로 그래픽하면 성능은 나오지만, 수요는 잘 없다..

AR 개발자가 되려면?

Q) AR 개발자가 되려면 어떤 개발 스택을 준비하면 좋나요?

Unity + C# 공부!
AR Foundation 으로 Face detecting, Image Marker 이런거 쓰면 플랫폼에 맞춰서 빌드를 잘 해준다!
Unity 를 써본 경험치가 있으면 좋고,
아무래도 로직은 C#이다보니까, C# 에 대한 이해도 높으면 좋다!
Unity 전체 기능을 다 알필요는 없고 특히 게임 엔진으로 다 쓰는게 아니라, 스크립트를 더 많이 짜고 랜더링 최적화 해야되니까,
일반 게임 개발할때와 다르게 C#을 잘 알아야한다
면접전에 C# 이해를 확인하기 위한 과제가 주어진다
알고리즘 문제를 시간내에 푸는것보다는, C# 이라는 언어에 대한 이해도가 필요하다 (객체지향에 대한 이해)
짜온 코드를 리뷰해보면서 C#을 잘 알고있는지 보고 채용을 한다
어자피 문제가 유출되어도 그 문제를 이해한 깊이가 중요하다

Q) 포트폴리오에 있으면 좋은 내용으로써 추천하시는게 있으실까요?

프로젝트 경험 + 내가 이 프로젝트에서 어떤 역할을 했는지 명확하게 설명할 줄 알아야한다
어떤 문제가 생겼을떄, 어떤식으로 해결해나갔는지 중요하다
그냥 잘된 프로젝트보다는, 프로젝트 하면서 생긴 문제 → 어떻게 해결했고 → 결과보여주고
프로젝트에 대한 관심도, 역할이 자연스럽게 나온다
AR 개발하려면 유니티가 좋겠지만, 어느 프로젝트도 상관없다

Q) AR 쪽으로 유명한 회사나 선두주자가 있는지..?

국내
Maxst : 기술력으로는 선두..
최근에 IPO 했다
멘토님 회사 (연구소에서 core 기술을 가지고있다!)
연구소 없고 컨텐츠만 만드는 회사가 많다
해외
뷰포리아
구글 AR core
애플 AR kit

Q) 영어 실력이 실제로 많이 중요한지

읽기 엄청 잘해야댐
쓰기도 조금 할줄 알면 좋다
국내에서는 블로그 수준이라서
기술적인것은 해외 개발자랑 소통 해야하는데
영어로 글을 좀 쓸줄 알면 상당히 도움이 많이 된다.
국내에서는 스피킹 / 리스닝 은 옵션

Q) 추천하는 언어가 있으신가요?

Javascript 싱기방기하다 → 웹 수요를 충족하려면 이거 해야지

Q) 특별히 C# 을 좋아하시는 이유가 있으신가요?

old 한 언어치고는 좋은 기능들이 많다
Java랑 역사가 별로 차이가 안나는데, 최신 언어 (go, swift 등) 가 있다고 하더라고, old한 언어의 이
언어를 깊이 알면 알수록 그 언어에서 쓸수있는 기법들이 있는데, C#이 기가막힘
여러 언어들의 장점들을 교묘하게 잘 가져와서 C# 버전업이 잘 되어있다.
C# 은 마지막 버전이 9.0! 임에도 불구하고, 실제로 C#으로 스크립트를 짜는 수준을보면 2.0 ~ 3.0 버전때 정도밖에 안된다...
async await 비동기 문법이 10년전부터 있었다........
map, filter, reduce 이거랑 똑같은 기능을 하는게 selecter where aggregate (link 문법) C# 에 이미 15년전부터 있다
C위에 좋은것들을 많이 넣어뒀다
자마린 이라는 플랫폼으로 C# 으로 앱개발도 충분히 가능하다
ObjectA obj; if (obj == null) obj = new ObjectA();
C#
복사
위의 코드와
obj ??= new ObjectA();
C#
복사
아래 코드가 같다..!
모던 언어들이 서로를 닮아간다
→ 언어 하나 깊게 파두면 다른 언어로 넘어갈때 부담이 점점 덜어진다
어쩌다가 C# 이 이렇게 되버렸는가......
→ 마소가 오픈소스 이런쪽에 늦게 시작해서..
→ 마소가 한거는 오픈소스 정신에 반대되니까 C# 이 마음에 안든다
아파치, mysql 쓰면 보통 라이세스 비가 안나오는데,
윈도우만 쓰면 자꾸 라이센스 비를 내야되니까...
그래서 이렇게 되버린게 아닌가.. 사실 이미 마소에서 다 준비했는데 인식때문에 이렇게 됐다...
결국 국내에서는 유니티에서만 C# 쓰고 가끔 성능이 중요하지않을때는 게임 서버에서 .NET 을 쓰기도한다..

Q) 어떤 계기로 개발자가 되신건가요?

재밌는거 해보고 싶어서

AR 개발업계의 장단점

Q) AR 개발자로써 느끼는 직업의 장점이 있으신가요

평범하지 않은걸 한다
남들이 잘 안보는 화면 보면서 개발하니까 특수하다
유니티 채용한다고 하면, 대부분 게임 → AR,VR 이런쪽의 경험하고 싶어하시는 분들이 별로 없다

Q) AR 개발자로써 느끼는 직업의 단점이 있으신가요

AR 뭐예요? 라고 물어볼때마다 첨부터 설명하기 참 애매하다
설명하는 팁 : 진짜와 가짜가 합쳐져서 진짜처럼 보이게 만드는 기술이다
AR 을 사람들이 잘 모른다.
홀로랜즈 씌워주기!

Q) 관심 있지만, 어떻게 접하고 배워야하는지 너무 어렵다, 어떤식으로 접근하면 좋을까요?

이쪽 분야도 찾아보면 교육과정이 있다.
경기도 AR VR 진흥센터
키워드 : ARVR 컨텐츠 개발 전문가 양성 과정같은게 있음
현장실습같은거 하시나요? → 인턴만 뽑는다
AR에 관심 있으면 멘토님한테 찾아가면 좋다 ㅎㅎ
배우고싶으면 같이 하면서 진행해볼수있다!