본문 바로가기

전체 글

Shader Study 후기 - Spherical Harmonics (22/09/19) 계기 발표 내용에 대한 후기에 앞서 셰이더 스터디에 참석한 후기를 간단히 설명드리자면, TA 스터디 월간 온라인 토크에서 자주 이야기를 나누던 Aniz 님의 추천으로, Shader Study 오프라인 모임에 처음으로 참석하게 되었습니다. 해당 모임에 관한 내용은 네이버 카페 - 셰이더 스터디 https://cafe.naver.com/shader 에서 일정을 확인하실 수 있습니다. 후기 회사 업무에 예상치못한 이슈가 생겨 아슬아슬한 시간에 퇴근을 성공하고, 거의 약속 시간에 맞추어 모임 장소에 도착했습니다. Spherical Harmonics와 Streaming Virtual Texture 2가지 토픽으로 발표가 있었는데요, 두 가지 모두 자주 사용하지만 세세하게 어떤식으로 동작하는지에 대해서는 명확히 알.. 더보기
OAuth 서드파티 시퀀스 다이어그램 레퍼런스 : https://plantuml.com/ko/guide PlantUML Language Reference Guide plantuml.com GitHub TPA 로그인 플로우를 만들어보려고 고민하면서 시퀀스 다이어그램을 끄적끄적... @startuml test skinparam SequenceBoxBackgroundColor #FFFFFF30 skinparam SequenceBoxBorderColor #00000070 box "LOCAL" actor PLAYER as user participant GAME_CLIENT as client end box box "REMOTE" participant GAME_AUTH_SERVER as server database GAME_DB as db end box.. 더보기
Unity: 호출하는 스코프에 따라 달라지는 값, Time.deltaTime 유니티 스크립팅은 게임오브젝트에 컴포넌트를 붙이고, 유니티 코어로부터 들어오는 이벤트를 기반으로 동작을 처리하며 행동을 디자인 합니다. 가장 많이 사용되는 예시로는 Awake, Start, Update, FixedUpdate 등이 있는데요. MonoBehaviour 클래스를 상속받고 이 함수를 구현하면, 유니티 코어가 인식하여 해당 함수를 실행시켜 줍니다. 본 아티클에서는 이 함수들 중, Update와 FixedUpdate에 대해서 얘기해 볼까 합니다. Update Update 함수는 매 프레임 호출됩니다. 게임의 타겟프레임이 60fps라면, 1초에 60번 호출될 것이라고 기대할 수 있습니다. 물론 이 Update 루프에서의 작업이 1초 / 60 의 수치인 0.0166667 초 보다 오래 걸렸다면 1초에.. 더보기
Unity. Windows 플랫폼에서 키보드 입력 막기 유니티는 Input 클래스와 비교적 최근 새로 추가된 InputSystem 클래스를 통해서 사용자의 입력을 받고 처리할 수 있습니다. Legacy 방식인 Input 클래스로는 유니티 게임 루프의 Update에서 Input.GetKeyDown, GetKeyUp 등의 이번 루프의 프레임에서 해당 키가 눌러지기 시작했거나 끝났는지 확인 하는 방식을 취합니다. Input System에서는 이벤트 방식으로, 어떤 키 입력에 대해 액션 이벤트를 트리거할지 정해두고, 이벤트에 델리게이트를 등록해두고 들어오는 신호를 토대로 입력을 핸들링합니다. Input System의 경우에는 글로벌한 스위치가 있어, 플레이어의 입력을 의도적으로 모두 차단 할 수 있는데요. Input 클래스는 그런 기능을 따로 제공해주고 있지 않습니.. 더보기
Unity: 패키지 매니저 상대 경로 사용하기 흔하지는 않지만 여러 프로젝트를 같은 루트에 두고 작업할 때, 패키지로 빼내어 공유하고 싶은 경우가 생깁니다. 절대경로로 로컬 디스크 패키지를 임포트하면 협업간에 디렉터리를 맞춰야하는 등 번거로움이 동반될 수 있습니다. 가급적 그런 케이스를 미연에 방지하기 위해 상대경로로 로컬 패키지를 로드하도록 해 두면 됩니다. ProjectKaya/Assets/Shared/package.json 프로파일이 있어, Kaya-MMORPG 프로젝트에서 임포트해 사용합니다. manifest.json 에서 file:../ 경로는 ProjectRoot/Packages 디렉터리입니다. 더보기
언리얼: LNK2001, LNK2019 등 unresolved external symbol 해결 언리얼 엔진은 C++를 언어를 사용하고, 여러 모듈을 참조해가며 작업해야 할 일이 잦습니다. 주기적으로 컴파일을 시도한다면 함수의 구현부를 작성하는 점을 잊는 등의 사소한 실수도 쉽게 파악해 큰 덩어리의 문제로 커질 일이 거의 없습니다. 때로는 어느 정도 규모의 작업을 한 번에 수행한 뒤 컴파일 및 런타임 테스트를 진행해야 하는 상황이 생깁니다. 일반적으로는 이미 만들어진 프레임워크의 리팩터링을 진행할 때 접할 수 있습니다. 여러가지 상황의 테스트 환경에서 다양한 개발을 시도하는 과정에서 많은 수의 링커 예외가 발생하면 당황스러울 수 있는데요, 다음 번 이와 같은 상황을 맞닥뜨렸을 때를 위해 순차적으로 확인해보았던 요소들을 기록해둡니다. 1. 함수의 구현부의 부재 헤더에 클래스를 정의하고 함수를 선언하였.. 더보기
[백준] 11050 이항계수 1 - GoLang https://www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net package main import ( "bufio" "fmt" "os" ) func factorial(t int) int { ans := 1 for i := t; i > 0; i-- { ans *= i } return ans } func main() { reader := bufio.NewReader(os.Stdin) writer := bufio.NewWriter(os.Stdout) defer writer.Flush() var n, k int fmt.Fscanln(read.. 더보기
Go: 테스트용 간단 REST API 앱 유니티 엔진에서의 리서치 도중 REST API를 통한 로그인 기능 구현을 할 일이 생겼습니다. 작년이었더라면 웬만한 작업들은 C#으로 해결하려고 ASP.NET Core로 눈을 돌렸을텐데요. 복잡한 기능 명세가 필요하지 않았고 이를 위해 적합한 새로운 언어가 있을거라는 생각에 GoLang을 이용해보기로 했습니다. 유니티 클라이언트에서는 HTTP로 적절한 헤더를 포함시킨 요청을 작성하여 보내고 응답을 받아 처리하는 로직을, GoLang에서는 라우팅에 따라 적절한 요청을 처리하고 결과를 응답하는 로직을 작성합니다. 라우터로는 메인테이닝이 이루어지지 않은지 꽤 된 것 같지만 13K의 Star를 보유하고 있는 julienschmidt/httprouter를 사용했습니다. https://github.com/julie.. 더보기