언리얼 / 유니티 / 자체엔진

  • 언리얼 = C++로 만들어짐
  • 유니티 = C++로 만들어진 엔진에 mono라는 번역기(C# -> C++)가 달려있음
  • 자체엔진 = C++엔진

프로그램 언어의 역사

기계어(1세대) -> C(2세대) -> C++(2.5세대) -> Java, C#(3세대) 등등
고급언어는 기계어로 변역된다

고급언어로 갈수록

  • 편의성, 생산성 증가
  • 로우레벨 제어, 하드웨어 제어 권한 감소

C++을 많이 사용하는 이유

  • 번역이 끝났을 때 기계어 줄 수가 더 작은 C++이 유리

  • 일반적인 메신저나 브라우저 같은 곳에서는 조금 느리거나 이런 걸 잘 신경안씀.

  • 게임에서는 1프레임 떨어져도 타격이 많이감.

  • 그래서 속력이 더 빠를 가능성이 높은 언어인 C++이 주역

  • C는 빠르지만 언어의 생산성이 낮음

cf) 언어의 생산성 증가시키는 요소
-> 인간을 생각한 직관적인 문법
-> 객체지향적

C++에 관하여

  • 비야네 스트롭 스트룹 개발

  • 외줄 타는 언어
    -> 따라쟁이 (Java에서 있으면 C++에서 생김 -> 불쾌한 골자기형 문법들이 많이 생김)
    -> 성능이랑 생산성에서 외줄을 타는 느낌

  • 오묘한 밸런스가 결국 속력과 생산성을 다 잡아야하는 게임에서 사용

C++ 시작

  • IDE(Visual Studio)를 사용해서 접근하는 것이 좋음.
    -> Visual Studio는 exe파일을 만들어 내는 것을 도와주는 프로그램

프로그램이란

  • xxx.exe 프로그램 실행파일
    -> xxx.exe 파일을 만들어내는 사람 => 프로그래머

파일 구조 (Structure)

솔루션

  • exe파일을 뽑아낼 수 있는 프로젝트를 여러개 모을 수 있는 단위
  • 프로젝트 파일 전체를 포함하는 파일
  • 솔루션 밑에 프로젝트 파일

프로젝트

  • exe파일을 뽑아내는 파일
  • ex)
    -> 게임 실행 파일
    -> 유지보스 파일
    -> 도움을 주는 파일
    • LoLItemEditor.exe = LoL 게임 내 Item을 만들고 데이터화 시키는 exe 파일
    • LolCampEditor.exe = LoL 게임 내 캐릭터를 만들고 데이터화 시키는 exe 파일
    • LoL.exe = 게임을 시작하는 파일

프로젝트 생성

  • 비주얼 스튜디오에서 프로젝트 파일은 한번에 1개씩 실행되는 것을 원칙으로 함.
  • 굵은 글씨의 프로젝트가 시작프로젝트
  • F5를 누르면 시작 프로젝트가 실행
  • 다른 프로젝트를 실행시키고 싶은 경우 해당 프로젝트를 시작 프로젝트로 변경해야 한다.

tip) 어느정도 프로젝트가 진행됐으면 자주 커밋을 하자 (2시간에 1번은 커밋하자)
-->에러가 안나는 상태로 커밋할 것

코드 (Code)

  • C++ 문법을 지켜서 프로그램을 만드는 언어
  • 문법이 정확하다면 F5를 눌러 컴파일 과정을 통해 exe파일을 만든다.

컴파일 (Compile)

  • 4가지 단계를 가진다.
    -> 전처리기
    -> 컴파일러
    -> 어셈블러
    -> 링커

전처리기 (PreProcess)

  • 전처리문 = 컴파일이 되기전에 컴파일 이전에 처리되는 것
    -> 1. 실제적인 코드와 관련, 의미 없는 것
    --> ex) 주석 삭제
// 삭제 되는 것(주석)
int main()
{
	return 0;
}

-> 2. 코드로 치환되어야 하는 전처리문
--> #이 붙는 것 삭제
--> ex) include문 삭제

#include <iostream> // 삭제 되는 것
int main()
{
	return 0;
}

-> 윈도우 = C++ 기반 코드를 전부 보관
-> Visual Studio = 코드 위치를 사용한다는 설정 되어있음
ex)

#include          		<iostream>
 사용하겠다(복사붙여넣기)   iostream을(파일)

cf) 확장자 = 사용자가 구분하는데 편리하게 하기위해 넣은 것

main() 함수

  • 프로세스를 시작한다는 행동
  • 프로그램의 진입점이라고도 함
  • main = "int __cdecl invoke_main(void)" or "?Invoke_main@@YAHXZ"

행동 (Behavior)

  • C++에서 다음과 같은 문법을 지키도록 설계
  • (행동의 결과 = 리턴값) (행동의 이름 = 이름) (행동의 조건 = 인자)
// 리턴값 이름   인자
   int   main  ()
   { // 행동의 시작
   		// 행동의 내용
   } // 행동의 끝

함수 (Function)

  • 내가 하고 싶은 행동
  • 함수의 이름 = 행동의 내용을 확인 (이름으로 유추 가능)
  • 반환 타입 = 행동 후 반환 되는 것

변수 (Variable)

  • 변수 표현 방법
    -> 변수 위치에 따라 문법이 달라짐
  • 변수 이름 : 램에서의 위치(주소값)
  • 변수 선언
// ex)
// 자료형  변수명  대입연산자   초기값(리터럴)    세미콜론(
   int    Att        =       10                ;
// Att라는 공격력을 만들고 초기값을 10으로 넣어줬다.

대입연산자 : 왼쪽에 있는 메모리를 오른쪽에 있는 메모리로 덮어 씌워라

자료형 (Data Type)

  • 크기 : 램에서 몇바이트 사용하는 가
  • 타입 : 유형(정수, 실수 등...)

    자료형 종류

    • void : 아무것도 없음
    • int : 정수 (4Byte)

cf) 데이터 크기
1Bit -> 1Byte -> 1KByte -> 1MByte -> 1GByte -> 1TByte

cf) 상태 = 변할 수 있는 것

전체 실행 과정

// 전처리기 (복 붙)
#include <iostream>

// 프로세스 시작 
int main()
{ // 행동 시작

	// 행동 내용
	// -> Att라는 변수는 int(정수) 타입이고 10(상수)이라는 리터럴값(초기값)을 대입연산자로 대입한다.
    int Att = 10;
    // 1. 스택영역 만들기
    // 2. 스택영역에 Att 공간(int 크기) 만들기
    // 3. 10이라는 값을 코드 영역에서 가져오기
    // 4. 코드영역에 존재하는 대입연산자의 연산 코드 가져오기
    // 5. CPU에 Att라는 좌측 메모리와 10이라는 우측메모리를 보내고 복사 연자를 보내기
    // 6. Att 메모리에 10을 대입
    
    // ->> Att는 주소값(Byte번지)으로 변함
    
} // 행동 끝
  • exe파일 작동 방식
    -> 1. 하드 디스크에서 exe파일(프로그램) 실행
    -> 2. 램에 exe 파일 올라감
    -> 3. 램에서 프로세스 실행

    -> 4. 프로세스 = 코드 영역 + 데이터 영역 + 힙영역 + 스택영역
    ->> 프로세스가 프로그램보다 용량이 더 큰 이유

    -> RAM에서 주소 할당

네임맹글링(name mangling)

  • 프로그래밍 언어에서 프로그래밍 엔티티의 고유한 이름을 사용할 때 발생하는 문제를 사용하기 위해 사용되는 기법
  • 컴파일러로부터 링커로 정보를 전달하기 위해 함수, 구조, 클래스, 자료형의 이름에서 추가 정보인코딩하는 수단

단축키 (Short cut key)

  • F5
    -> 디버깅 시작

  • 커서 + ctrl + shift + G
    -> 커서에 해당하는 파일의 내용

  • //

// 내용

-> 한줄 주석

  • /**/
/*내용*/

-> 범위 주석

  • ctrl + K + C
    -> 주석(단축키)

  • 파일의 위치 확인
    -> 파일에서 우클릭하여 상위 폴더 열기 클릭

검색 방법

  1. cplusplus.com = C++ 공식 포럼 - 0순위
  2. MSDN(마이크로 소프트) - 1순위)
  3. 위키백과 - 2순위
  4. C++ 파워유저 블로그 - 3순위
  5. 블로그 -> 올린 날자 볼것! - 4순위
  6. Chat-gpt = 걸러 들어야 한다.

cf) 프로그램과 프로세스의 용량 차이가 나는 이유

  • 프로그램 = ~할 거야 (설계도)
  • 프로세스 = ~했어 (직접 실행)
    -> 설계도와 직접 실행에는 차이가 있기 때문에
profile
게임 개발

0개의 댓글

Powered by GraphCDN, the GraphQL CDN