1.AI퀴즈(매일 10문제)
2.코드카타(매일 3문제)
3.언리얼 기초 다지기
AI퀴즈
진도를 따라잡혀서 모르는 내용밖에 안나왔음.
코드카타
문제 1: [숫자 비교하기]
- 접근 방식: 조건문을 사용해서 숫자가 같을 경우와 다를 경우 2가지 케이스로 나누려고 하였다.
- 핵심 코드: != 같지않다는 의미
- 피드백 & 최적화: 생략
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int num1, int num2) {
int answer = 0;
if(0<=num1&&num1<=10000 && 0<=num2&&num2<=10000)
{
if(num1==num2)
{
answer = 1;
}
if(num1 != num2)
{
answer = -1;
}
}
return answer;
}
문제 2: [두 수의 합 구하기]
- 접근 방식:리턴값에 num1과 num2값을 +기호를 사용해 더하여 저장해 줬다.
- 핵심 코드:+ 기호
- 피드백 & 최적화: 생략
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int num1, int num2) {
int answer = 0;
if(-50000<=num1&&num1<=50000 && -50000<=num2&&num2<=50000)
{
answer = num1 + num2;
}
return answer;
}
문제 3: [두 수의 나눗셈]
- 접근 방식:num1과 num2를 나눠서 1000을 곱하고 answer변수에 저장하자. 단, 변수가 모두 정수타입이기 때문에 나눈 값이 0.5 같은 실수로 나오게 되면 0으로 처리되니 계산할 때 잠깐 변수하나를 형변환 시켜주었다.
- 핵심 코드:(double)num1
- 피드백 & 최적화: 형변환 하지 않고 그냥 1000*num1/num2 로 진행하면 깔끔해진다. 나누기를 하기 전에 1000을 먼저 곱해서 소수점 아래로 내려갈 숫자들이 미리 정수 자리(일의 자리 이상)로 올라오게끔했기 때문.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int num1, int num2) {
int answer = 0;
if(0<num1&&num1<=100 && 0<num2&&num2<=100)
{
answer = ((double)num1/num2)*1000 ;
}
return answer;
}
언리얼 기초 다지기
어제 배운 내용 복습 시퀀스
- 어제 한 코드 다 지우고 한글 주석만 보고 구현하기
- 1분 동안 생각해보고 모르면 바로 정답코드 보기
- 잘 몰랐던 부분 메모 해두기
void OnChatInputTextCommitted(const FText& Text, ETextCommit::Type CommitMethod);
왜 이 함수에 리플렉션 매크로( UFUNCTION() ) 을 꼭 달아 줘야 될까?
언리얼의 AddDynamic(동적 바인딩)을 사용해 이벤트와 내 함수를 연결하려면, 언리얼 엔진이 내 함수의 이름을 인식할 수 있어야 하므로 UFUNCTION()을 달아줘야 한다.
#언리얼 델리게이트 개념강의 참고하기
오늘 배운 핵심 이론
주제:언리얼 서버 종류와 데디케이티트 서버의 구조
서버 종류
- Peer-to-Peer
모든 사람이 서버이자 클라이언트
다크소울, 토렌트 - Listen
클라이언트이자 서버인 방장이 있고
나머지 참가자는 모두 클라이언트
마크,어몽어스 - Dedicated
서버 담당자가 있고
나머지는 모두 클라이언트
배틀그라운드
우리가 배울건 데디케이티트 서버
데디케이티드 서버의 구조
- PIE 또는 Server.exe 실행하여 서버 프로세스 실행
- 서버안에 Level, GameMode, GameState 생성
- 다른 PC가 접속할 수 있게 Socket이 생성됨
- 다른 PC사용자가 서버의IP주소와 포트번호로 접속을 시도
서버는 접속 시도 클라이언트에게 Level정보를 준다. - 클라이언트가 Level여는데 성공하면 서버에게 다시 알림
- 성공알림을 받은 서버는 Level을 여는데 성공한 클라이언트의 전용
PlayerState, PlayerController,PlayerCharacter
생성하고 클라이언트에게 복사해준다.
이때 GameState도 복사해줌. - 다른 클라이언트가 접속했다면 위 과정을 반복.
- 단 접속한 클라이언트의 각자의 PlayerController정보는 복사되지않는다.
- 서버-클라이언트 구조의 아주 중요한 특징
- 그림에서 볼 수 있듯, 클라이언트와 클라이언트 간의 통신이 불가능합니다.
- 오직 서버와 클라이언트 사이의 통신만 가능합니다.
- 이것이 앞으로 배울 RPC나 프로퍼티 레플리케이션에도 영향을 끼칩니다.

1. NetMode
- 한 줄 요약:이 게임 프로세스가 지금 어떤 역할(상태)인가?
- 핵심 구분:
- Standalone:싱글 플레이.
- Dedicated Server:연산과 규칙 판정만 하는 서버
- Listen Server:플레이어가 직접 게임을 플레이하면서 동시에 서버 역할(방장)까지 겸함.
- Client:서버가 만든 방에 접속해서 조작만 하는 일반 참가자.
2. NetMode의 필요성
- 한 줄 요약:서버와 클라이언트가 똑같은 코드를 같이 실행하기 때문
- 이유:멀티 게임에서는 서버 컴퓨터에도 내 캐릭터가 있고, 내 PC에도 캐릭터가 있습니다. 이 코드가 서버에서 도는 건지, 클라이언트에서 도는 건지를 구분해서 서로 다른 처리를 해주기 위해.
3. NetDriver (잘 모르겠음)
4. NetConnection
- 한 줄 요약:손님(클라이언트)과 요리사를 1:1로 매칭해주는 식당 주문번호 영수증
- 역할: 클라이언트와 서버와 연결 고리.
- ServerConnection: 클라이언트가 서버를 바라보는 단 하나의 영수증.
- ClientConnection: 서버가 접속한 각각의 클라이언트들을 바라보는 영수증.(클라이언트 수만큼 생김)

5. Ownership(잘 모르겠음)
6. 디버깅용 로그(잘 모르겠음)
- 개념:현재 실행 중인 주체가 Client인지 DedicatedServer인지 코드로 판별하는 작업.
- 목적:공격을 했는데 데미지가 안 들어갈 때, 이 로그를 찍어서 서버로 패킷이 안 갔는지 확인하는 디버깅용 코드.
학습 내용중 주의할 점:
- 클라이언트와 클라이언트 간의 통신이 불가능
- GameMode는 오직 서버만 가짐
NetDriver/Ownership/디버깅용 로그 내일 꼭 다시 확인하기
'TDL(To_Day_List)' 카테고리의 다른 글
| 2026/06/01 (0) | 2026.06.01 |
|---|---|
| 2026/05/19 (0) | 2026.05.19 |
| 2026/05/15 (0) | 2026.05.15 |
| 2026/05/14 (0) | 2026.05.14 |
| 2026/05/13 (0) | 2026.05.13 |