TIL

[250218 TIL] 람다함수

yoosorang 2025. 2. 18. 22:17
🕒TID
🔸알고리즘 공부 (코딩테스트 합격자 되기 C++ 편)
     배열 이론 부분 완료
🔸게임 수학 공부
🔸게임 AI 특강
🔸프로젝트 작업

1️⃣ 코딩테스트 공부

🔹람다함수

[캡처](매개변수) -> 반환형 { 함수 본문 };
  • 캡처(capture): 람다 함수 내부에서 외부 변수를 어떻게 사용할지 지정.
    • [=] : 외부 변수 읽기 전용(복사)로 사용
    • [&] : 외부 변수 참조(레퍼런스)로 가져와 수
  • 매개변수(parameter): 일반 함수처럼 인자를 받을 수 있음.
  • -> 반환형(return type): 반환형 지정 (생략 가능, 자동 추론).
  • { 함수 본문 }: 함수의 동작을 정의.

 

2️⃣ 게임수학

F = 플레이어의 전방벡터

D = 플레이어가 바라보는 타겟까지의 벡터(타겟 위치 - 플레이어 위치)

🔹내적의 활용1) 플레이어와 대상 물체 간의 전후방 판별

F⋅D > 0 → 전방

F⋅D < 0 → 후방

F⋅D = 0 → 측면

좌/우는 외적을 통해 알 수 있음

내적은 크기와 방향을 비교하는 개념, 외적은 새로운 방향을 찾는 개념

🔹내적의 활용2) 시야각 내에 물체가 있는지 판별

(플레이어의 시야각 / 2)의 코사인 값 < F⋅D/∣A∣×∣B∣→ 타겟은 시야 내에 포함

(플레이어의 시야각 / 2)의 코사인 값 > F⋅D/∣A∣×∣B∣→ 타겟은 시야 외에 존재

🔹외적의 활용1) 직교 상황에서의 방향 판별(2D 게임 왼/오 판별)

F X D > 0 반시계(왼)

F X D < 0 시계(오)

🔹외적의 활용2) 표면의 법선 벡터 계산(3D 게임 충돌 및 조명 처리)

F와 D가 이루는 평면의 법선 벡터 = F X D

 

3️⃣ 언리얼 C++

🔹OpenLevel 사용

//FName을 활용하는 레벨 이동

#include "Kismet/GameplayStatics.h"

//.h
FName LevelToMove;

//.cpp
if (!LevelToMove.IsNone())
{
	UGameplayStatics::OpenLevel(GetWorld(), LevelToMove);
}
//에셋 선택을 활용하는 레벨 이동

#include "Kismet/GameplayStatics.h"

//.h
TSoftObjectPtr<UWorld> LevelToMove;

//.cpp
if (!LevelToMove.IsNull())
{
	UGameplayStatics::OpenLevelBySoftObjectPtr(GetWorld(), LevelToMove);
}