내일배움캠프 언리얼 17

멀티 플레이 네트워크

실행모드정의특징Standalone네트워킹을 고려하지 않는 단일 인스턴스- 싱글플레이어(로컬 세션)- Replicate 미사용- Gameplay 클래스가 하나로 실행Dedicated ServerServer 전용 인스턴스- Local 플레이어 없음- 렌더링 X / GPU 없이 구동 가능- 게임 로직, 네트워크 통신만 처리- 원격 머신이나 클라우드 배포Listen Server한 플레이어가 동시에 Server 호스트 역할- Server이자 Client 역할 수행- 호스트에게 UI, PlayerController 존재- 호스트가 게임 종료시 Server도 종료- P2P 스타일 게임에서 사용Client호스트가 아닌 모든 플레이어- Server로부터 데이터를 받음- 자신의 입력을 Server에 전송- 자율적 Play..

언리얼 엔진 5 C++ 개발(WIL)

언리얼 엔진 5 C++ 개발 환경 설정 요약더보기1. 언리얼 엔진 5 설치 및 설정 Epic Games Launcher 설치 및 실행 → "언리얼 엔진" 탭 → "라이브러리" 에서 버전 확인 각 버전마다 내부 코드 구조와 빌드 방식이 변경, 개선되어 버전확인 필요 5.5 버전 C++ 빌드 오류 예방을 위해 엔진 폴더(예: C:\Program Files\Epic Games\UE_5.5)의 "읽기 전용" 해제 UE_5.5\Engine 폴더 우클릭 → 속성 선택 → 읽기 전용 해제 → 하위 폴더 및 파일에도 적용 엔진 빌드 과정에서 폴더가 읽기 전용이면 빌드 중 파일 수정이 불가능해 컴파일 충돌이 발생할  수 있음 2. Visual Studio 2022 설치 및 설정 Visual Studio Installer..

WIL

클래스 복사더보기한 클래스의 내용을 다른 클래스로 복사를 하고 싶을 때 사용하며 클래스 복사에는 얕은 복사, 깊은 복사의 종류가 있다. 이 두 가지는 상황에 따라 사용법이 달라진다. 얕은 복사  얕은 복사는 내용물을 새롭게 복사하지 않고 기존의 메모리 주소를 공유하는 방식으로 성능 최적화와 메모리 관리를 단순하게 하기 위해서 주로 사용된다. 객체의 데이터를 새롭게 할당하여 복사하는 깊은 복사에 비해 얕은 복사는 주소만 복사하기 때문에 속도적으로 우세하며 메모리 사용 효율도 증가한다. 하지만 얕은 복사를 사용하게 될 경우 한 객체에서 데이터를 변경하면 다른 객체도 영향을 받으며, new와 함께 사용되는 delete가 두번 사용되게 되는 경우가 있으며 이럴 때 오류가 발생할 가능성이 있어서 주의가 필요하다...

C++ 클래스(1)

함수 전방 선언 : main 함수가 핵심 함수이지만 다른 함수가 많아 계속 밀리게 된다면 main 함수를 찾기 힘들다. 그래서 main 함수를 앞으로 당기게 된다면 main 함수 위에서 선언되었던 함수를 찾기 못해 컴파일 오류가 발생하게 된다. 그렇게 함수의 앞부분(head)을 main 함수 위에 붙이게 되면 컴파일러가 아래에 있는 함수를 발견할 수 있게 되어 오류가 발생하지 않는다. 클래스에서도 똑같이 클래스 전방선언을 통해 인식 시키는 것이 가능하다.   분할 컴파일 : main 함수가 길어짐에 따라 컴파일에 시간이 걸리며 충돌이 발생할 가능성이 높아진다. 그러므로 파일 별로 컴파일을 진행하며 MyMath.cpp가 바뀌면 그 파일만 컴파일 하고 main함수는 방치할 수 있다. 그렇게 컴파일 시간이 줄..

객체 지향 프로그래밍(2)

다형성  다형성은 하나의 타입으로 여러개의 객체를 가리킬 수 있는 특성이며 부모 클래스의 포인터로 자식 클래스의 객체를 가리킬 수 있어 자식 클래스들을 부모 클래스의 포인터 배열로 통합 관리가 가능하다. 예를들어 강아지와 고양이를 만들고 그 객체들이 울게 만들면 dog.soundplay, cat.soundplay 등등 객체가 만들어지면 만들어질 수록 적어야 할 것들이 늘어나지만 자식 객체에 부모 객체의 포인터 변수를 담게되면 int main(){ Animal* dog = new Dog("강아지", "멍멍", 100); Animal* cat = new Cat("고양이", "야옹", 100); Animal* animals[2] = {dog, cat}; for (int i = 0; i SoundPlay(); ..

객체 지향 프로그래밍(1)

일반적인 함수로 코드를 짜게 되면 개체가 늘어남에 따라 코드가 지저분해진다. 함수#include using namespace std;void animalSoundPlay(string animalName, string animalSound){ cout    예를 들어 이처럼 반복되는 부분들을 함수로 분리를 해도 괜찮지만 기능이 늘어나면 문제가 발생하게 된다.만약 동물끼리 전투 시스템을 추가한다고 하게 된다면void Attack(string attacker, string defender){ cout   이 곳에서 나오는 attacker의 강아지와 AnimalSoundPlay의 강아지는 별개의 존재가 되어버린다.그렇기 때문에 클래스를 사용하며 개체의 특정과 매개변수를 감소시킬 수 있게 된다. 클래스class ..

10조 KPT 회고

Keep - 현재 만족하고 있는 부분필수 기능과 도전기능을 전부 수행 완료함.게임을 구동하는 중 오류가 없었다.의사소통이 빠르게 되어 오류가 빠르게 수정됨.질문에 친절하게 답변을 해주는 부분.팀워크가 좋아 팀 내 다툼이 없었다.Problem - 불편하게 느끼는 부분메모리 릭을 잡지 못했다.주석관리가 깔끔하지 못했다.코드 컨벤션 관리가 미흡했다.출력된 로그들이 너무 복잡했다.Try - Problem에 대한 해결책, 당장 실행 가능한 것메모리 릭 New에 맞춰 Delete를 작성하여 메모리 누수를 막을 수 있다.코드마다 보기 좋게 주석을 달아 관리할 수 있다.코드 함수의 명칭을 통일화 시킬 수 있다.CUI를 이용하여 CMD 화면을 초기화 할 수 있다.

비전공자의 C++ 개발시점 6 (2025.01.02)

본 게시물은 내일배움캠프: 언리얼 게임 개발을 수강한 비전공자의 TIL(Today I Learn)을 담고 있습니다.  STL더보기STL은 템플릿 라이브러리로 컨테이너, 알고리즘 등 C++에서 기본적으로 제공되는 기능이다. 단순한 배열은 데이터를 넣을 때 고려해야 할 것이 많은데 벡터의 경우는 배열의 기능을 그대로 사용할 수 있으면서 데이터를 수납할 때 자동으로 공간이 늘어나기 때문에 걱정이 적다. 모든 STL을 동작시킬 때 괄호 안에 시작과 끝이 시작에는 자신이 포함되지만 마지막은 자신이 포함되지 않음ex )  vec.erase(vec.begin() + 1, vec.begin() + 3)  //  두번째부터 세번째를 제거 Key와 Value는 주로 한쌍을 이루고 있으며 이 자료는 Hash라고 한다.컨테이..

비전공자의 C++ 개발시점 5 (2024.12.31)

본 게시물은 내일배움캠프: 언리얼 게임 개발을 수강한 비전공자의 TIL(Today I Learn)을 담고 있습니다.    메모리는 0과 1의 조합으로 4칸으로 이뤄지면 4비트로 대부분의 1바이트가 8비트로 이뤄져 있다. 메모리는 프로그램이 실행될 때 사용하는 RAM:Random Access Memory의 일종으로 여러 칸으로 이루어져 있고 각 칸은 고유한 주소를 가지게 된다. 일반 변수들은 스택 메모리 공간을 차지하며 특정 칸에 데이터를 저장하는 이름표 역할을 한다. 포인터더보기  포인터는 다른 변수의 메모리 주소를 저장하는 변수로 메모리의 위치를 가리키는 역할을 한다. 포인터는 변수의 메모리 주소를 얻는 참조(&)와 포인터가 가리키는 주소에 저장된 값을 얻는 역참조(*)가 있다. int a = 10 이..

비전공자의 C++ 개발시점 4 (2024.12.30)

본 게시물은 내일배움캠프: 언리얼 게임 개발을 수강한 비전공자의 TIL(Today I Learn)을 담고 있습니다.  배열더보기배열의 선언(int / double / char) Numbers[3]   //  int = 정수, double = 소수,  char = 문자= Numbers[0], Numbers[1], Numbers[2] (int / double / char) Numbers[3] = {10, 20, 30}   배열의 연산 int (int/double)Sum = numbers[0] + numbers[1] + numbers[2]  //  배열 합 계산numbers[1] = 50;  //  배열의 값 (두 번째) 수정  배열 입력(int / double / char) Numbers[3];cin >> ..