728x90

전체 글 715

24.01.10 Jinja2

Jinja2 파이썬에서 가장 많이 사용되는 템플릿 엔진 중 하나. Django의 템플릿 시스템에서 영감을 얻었지만 템플릿 작성자에게 더 강력한 도구 세트를 제공하는 표현 언어로 확장. Jinja2는 어떤 파일, 실제하는 파일에 어떤 변수들을 집어넣어 약간 변경시켜서 html로 만들어주는 엔진, 같은 것이다. Jinja2 is a templating engine for Python. 여기서 template engine 이란 template(문서 원형)과 data model을 혼합하여, 새로운 document를 만드는것. 보통 flask에 포함되어 있는 jinja를 사용한다. 템플릿 엔진을 사용하는 이유 재사용성이 높다. 한 페이지를 템플릿 엔진 문법으로 만들어 놓고 여기에 데이터를 바꿔가면서 렌더링하면 수..

24.01.08 JWT

인증과 인가 인증 자격 증명확인 비밀번호, 생체인식, 일회용 핀 사용자가 볼 수 있음 사용자가 부분적으로 직접 변경 가능 ID 토큰을 통한 데이터 전송 로그인 ex) 놀이공원 입장 인가 권한 허가/거부 보안 팀에서 관리하는 설정 사용 아니오 불가능 액세스 토큰을 사용한 데이터 전송 사용자의 로그인 이후의 활동에 대한 서버의 허가 ex) 티켓을 보여주면 놀이기구를 탈 수 있음 JWT(Json Web Token) 서비스에서 유저를 인증하고 식별하기 위한 Token(토큰) 기반 인증 방식 토큰은 세션과 달리 서버가 아닌 클라이언트에 저장된다. 인증에 필요한 정보들을 암호화시킨 Json형식의 토큰 JWT의 구조 & 생성 & 발급 Header(헤더) JWT에서 사용할 타입과 알고리즘의 종류 Payload(페이로드..

3. Bullet, Gizmos, TrailRender, Particle

게임에서 총기류 발사 방식은 Projectile 방식과 Raycast 방식으로 크게 두 가지 방식으로 구현된다. - Projectile 총알이 물리적으로 발사되는 방식으로 총알이 직접 날아가 적에게 타격을 입힌다. 따라서 총알이 시각적으로 표현되지만 짧은 시간 동안 여러 개의 총알을 생성하게 되면 게임의 속도가 저하되는 단점이 있다. 이 단점을 보완하기 위해 총알은 될 수 있으면 로우폴리(Low Poly) 모델이나 평면 Mesh 모델에 텍스처를 입혀 사용한다. 총알 역시 동적으로 생성하기보다는 오브젝트 풀(Object Pool) 개념을 도입해 총알을 미리 생성해 두고 번갈아 가며 발사되도록 구현하는 편이 속도 향상에 유리하다. - Raycast 방식 Raycast 방식은 FPS 게임에서 저격총 발사 루틴..

Unity/TPS 2023.10.24

2. Ctrl, Animation, Shadow, LODGroup

플레이어 객체를 만들어주고, PlayerCtrl 스크립트를 만들어주어 움직임을 구현했다. 상하좌우 대각선 움직임을 구현했다. 추가로 애니메이션을 추가하고 움직임 Horizontal, vertical 값에 따라 애니메이션이 변하도록 스크립트를 짜줬다. 애니메이션이 갑작스럽게 변경된다면 어색함이 느껴질수 있기 때문에, CrossFade함수를 적용해서 자연스럽게 애니메이션이 변하도록 해줬다. 원래있던 그림자를 지워주고 새로운 객체를 만들어서 그림자 처럼 보이게 만들어주었다. 그림자가 원래 있지만 실시간 그림자 처리 부담이 매우 크다. 그러기 떄문에 cast shadow를 꺼줬다. LOD(Level of Detail) 설정을 해줬다 LOD는 화면을 렌더링하는 카메라로부터 멀리 떨어질수록 낮은 폴리곤으로 변경해서..

Unity/TPS 2023.10.22

1. Introduction to the C++

다시 열심히 블로그에 적어봅시다. 1. C++ 란 무엇인가 C++는 Bjarne Stroustrup이 C 프로그래밍 언어의 확장으로 만든 범용 프로그래밍 언어이다. 1985년 처음 소개됐으며, 클래스 및 상속과 같은 객체 지향 기능을 제공한다. C++는 게임 개발, 시스템 프로그래밍, 임베디드 시스템, 고성능 컴퓨팅 등 다양한 애플리케이션에 널리 사용된다. C++는 정적 타입 언어이다. 즉, 변수 유형은 컴파일 중 결정되며, 다양한 작업을 위한 풍부한 함수, 알고리즘 및 데이터 구조 세트를 제공하는 C++ 표준 라이브러리 라는 광범위한 라이브러리가 있다. 정적 타입 언어 - 작성자가 소스 코드를 보고 변수 타입을 직접 작성하는 언어 변수에 들어갈 값의 형태에 따라 자료형을 지정해주어야한다. 컴파일시 맞지..

언어/C++ 2023.10.02

5. 벡터의 결합과 생성

벡터 공간의 벡터의 합과 스칼라 곱셈 연산은 선형성이 있어서 선형 연산이라고도 한다. 선형 연산을 사용해 n개의 스칼라와 n개의 벡터를 결합해 새로운 벡터를 생성하는 수식을 선형 결합(Linear Combination)이라고 한다. 선형 결합시 모든 a가 0이 아님에도 영베터를 만들 수 있다면, 선형 결합에 사용된 벡터는 서로 ‘선형 종속의 관계’ 를 가진다. 반면 영벡터가 나오기 위해 모든 a값이 0이어야 한다면 선형 결합에 사용된 벡터들은 서로 ‘선형 독립의 관계’를 가진다 라고 표현한다. 벡터 간의 선형적 관계는 벡터 공간을 다룰 때 중요하게 사용 - 선형 독립의 관계를 가지는 벡터를 선형 결합하면 벡터 공간에 속한 모든 벡터를 생성할 수 있기 때문 두 벡터가 선형 독립의 관계를 가진다면 선형 결합..

9. 연산자 오버로딩

함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공한다 - 이름은 하나지만 기능은 여러가지 연산자 또한 가능하다 ‘operator’ 키워드와 ‘연산자’를 묶어서 함수의 이름을 정의하면, 함수의 이름을 이용한 함수의 호출뿐만 아니라, 연산자를 이용한 함수의 호출도 허용 연산자를 오버로딩 하는 두 가지 방법 멤버함수에 의한 연산자 오버로딩 전역함수에 의한 연산자 오버로딩 동일한 자료형을 대상으로 +연산자를 전역함수 기반으로, 그리고 멤버함수 기반으로 동시에 오버로딩 할 경우, 멤버함수 기반으로 오버로딩 된 함수가 전역함수 기반으로 오버로딩 된 함수보다 우선시 되어 호출 오버로딩이 불가능한 연산자의 종류 . - 멤버 접근연산자 .* - 멤버 포인터 연산자 :: - 범위 지정 연산자 ?: - 조건 연..

언어/C++ 2023.02.02

1. 싱글톤 패턴(Singleton_Pattern)

객체를 딱 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴 싱글톤 패턴을 사용하면 객체 생성을 단 한 번으로 제한하여 객체들이 복제되는 경우를 방지할 수 있다. 메모리 낭비를 유발할 수 있다고 판단되는 경우 사용할 수 있다 장점 메모리 낭비를 방지할 수 있다. 싱글톤으로 만들어진 클래스와 다른 클래스의 인스턴스들의 데이터 공유가 쉽다 인스턴스가 절대적으로 한개만 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있다. 싱글톤 객체를 사용하지 않는 경우 인스턴스를 생성하지 않는다. 싱글톤을 상속시킬 수 있다. 단점 전역변수보다 사용하기가 불편하다 싱글톤의 역할이 커질수록 결합도가 높아져 객체 지향 설계 원칙에 어긋날 수 있다. 멀티쓰레드 환경에서 컨트롤이 어렵다 객체..

가상(Virtual)의 원리와 다중상속

가상(Virtual) 객체가 생성되면 멤버변수는 객체 내에 존재하지만, 멤버함수는 메모리의 한 공간에 별도로 위치하고선, 이 함수가 정의된 클래스의 모든 객체가 이를 공유하는 형태를 취한다. 오버라이딩 된 가상함수의 주소정보는 유도 클래스의 가상함수 테이블에 포함되지 않는다. 가상함수 테이블에 의한속도의 저하 클래스에 가상함수 포함되면, 가상함수 테이블이 생성되고, 또 이 테이블을 참조하여 호출될 함수가 결정되기 때문에 실행속도가 감소한다. 하지만 그 속도의 차이가 극히 미미하다 다중상속(Multiple Inheritance) 둘 이상의 클래스를 동시에 상속하는 것 논란이 많은 문법 득보다는 실이 더 많다 기본문법에서 제외되어야한다. 일반적인 경우 다양한 문제를 동반하지만 제한적인 사용까지 부정할 필요는..

언어/C++ 2023.01.31
728x90