TIL

[2501122 TIL] 언리얼 C++ 애니메이션 연결 및 아이템 구현

yoosorang 2025. 1. 22. 22:21

1️⃣ 알고리즘 코드카타

https://school.programmers.co.kr/learn/courses/30/lessons/161989#
[ 덧칠하기 ]

🤖 AI 피드백

1. 불필요한 반복
모든 위치를 하나씩 검사하여 덧칠이 필요 없는 구간도 불필요하게 확인

2. section의 특성 활용X
section을 활용해 불필요한 반복 줄일 수 있음

3. 가독성
플래그(check)와 길이(length)를 사용해 상태 관리하여 복잡

4. 개선 코드

#include <vector>
using namespace std;

int solution(int n, int m, vector<int> section) {
    int answer = 0;
    int lastPainted = 0; // 마지막으로 페인트칠한 위치

    for (int pos : section) {
        // 현재 위치가 마지막 페인트 범위를 벗어나면 새로 페인트칠
        if (pos > lastPainted) {
            lastPainted = pos + m - 1; // 롤러로 덧칠 가능한 범위 갱신
            ++answer; // 롤러 사용 횟수 증가
        }
    }

    return answer;
}

💭 회고

우왁우왁 풀었다!!!

와 근데 테스트 케이스 반례 떠올리기가 진짜 힘들었다.
너무 범위 반복에만 집중했나

주어진 입력을 더 효율적으로 활용할 방안을 생각했어야 했는데..
그리고 난 엄청 복잡하게 풀었는데 ai 풀이 보니까 허망 그 자체..허허
그래..이런 풀이도 있군아..

 

2️⃣ C++와 Unreal Engine으로 3D 게임 개발

🔹지형이 달라졌을 때 캐릭터의 발 위치 조정

 

🔹애니메이션 블루프린트에서 애니메이션을 위한 변수 설정

 

🔹아이템 구현 계층

BaseItem은 IItemInterface를 상속받음

 

🔹 C++타이머 함수

void AMineItem::ActivateItem(AActor* Activator)
{
	//게임 월드-> 타이머 매니저(타이머 핸들러 관리)
	//타이머 핸들러

	GetWorld()->GetTimerManager().SetTimer(
		ExplosionTimerHandle,
		this, //해당 객체에 타이머를 달아줌
		&AMineItem::Explode,
		ExplosionDelay,
		false //타이머가 반복될지 아닐지
	);
}

 

💥문제

▪️ 상황
UFUCTION을 사용하려니까 쓴 적도 없는 final을 선언할 수 없다는 에러 발생

 

▪️ 해결
위에 public 적어주니 해결

 

3️⃣  추가 공부

🔹UPROPERTY와 UFUNCTION

▪️ UPROPERTY() 

  • private/protected: 캡슐화
  • public: BlueprintReadWrite 또는 EditAnywhere 속성일 경우(블루프린트 노출 필요할 경우)

 ▪️UFUNCTION()

  • private/protected: 게임플레이 로직에서만 호출되거나 상속 관계에서만 접근할 경우
  • public: BlueprintCallable, BlueprintImplementableEvent 속성일 경우 

 

🔹추가 meta 팁

▪️ AllowPrivateAccess
private 또는 protected에 선언된 UPROPERTY를
블루프린트 또는 디테일 패널에서 사용 가능하도록 허용

private:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats", meta = (AllowPrivateAccess = "true"))
    float Health;​


▪️ExposeOnSpawn
변수를 스폰 시점에서 초기화 가능하도록 설정
(주로 객체가 생성될 때 값을 설정해야 할 때 사용)

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats", meta = (ExposeOnSpawn = "true"))
float Mana;​

💭회고
지금까지 클래스를 필요한대로 만들었는데
오늘 강의에서는 아이템에 대해서 쳬계적인 계층으로 제작하는 것을 배울 수 있었다.
확장성을 고려하여 미리 변수나 함수를 제작하는 과정이 중요하다는 것을 엿볼 수 있었다.
나중에 텍스트 RPG 때 만들어본 인벤토리도 함께 만들어보면 좋을 것 같다!