● 더 많은 상호작용
테스트로 만든 방 문 액터는 성공적이니 이를 기반으로 다향한 상호작용이 가능한 액터를 만든다.
A. 복도를 막고 있는 액터

복도 끝 쯤에 배치하여 지나갈 수 없게 만든다. 지금은 상호작용을 하면 바로 없어지지만 이후에 적이 있으면 없어지지 않게 만들 생각이다.
B. 문 스위치

상호작용마다 열거나 닫을 수 있는 문이다. 상호작용은 노란 스태틱 메시에서 할 수 있다. 상호작용시 스위치 손잡이와 문이 움직인다.
private:
//열고 닫을 문 액터
UPROPERTY(EditInstanceOnly, Category = "Gate Action", meta = (AllowPrivateAccess = true))
AActor* GateActor;
//문열림 여부
UPROPERTY(EditAnywhere, Category = "Gate Action", meta = (AllowPrivateAccess = true))
bool bGateOpen;

문 액터를 변수로 할당하여 다룰 수 있게 만들었다. (EditInstanceOnly키워드를 적었으니 맵에 배치된 경우에만 할당이 가능하다.)
그리고 bool값도 변경이 가능하게 만들었는데, 게임 진행 도중 문 열림 여부를 판단하기도 하지만 시작시 열림 여부도 결정하기 때문이다.
//시작부터 열린 문인가
if (bGateOpen)
{
//스위치
float MinValue, MaxValue;
SwitchTimelineCurveFloat->GetValueRange(MinValue, MaxValue);
SwitchTimelineFunc(MaxValue);
//문
GateTimelineCurveFloat->GetValueRange(MinValue, MaxValue);
GateOpenTimelineFunc(MaxValue);
}
타임라인커브에서 GetValueRange를 쓰면 할당된 타임라인의 최솟값, 최댓값을 알 수 있다. 이를 이용하여 처음부터 열린 상태로 만들려면 어떤 값을 넣어야 하는지 알 수 있다.
C. 엘리베이터 버튼

스테이지 2의 마지막 구간에 존재하는 엘리베이터 버튼에 상호작용이 가능하다. 지금은 누르기만 하면 바로 엘리베이터 문이 열리지만 여기에 좀비가 단체로 몰려드는 상황을 연출하기로 했으니 내용 구현은 그때가서 생각해야겠다.
D. 연구소 방의 문

마지막 스테이지의 방의 문이다. 상호작용시 열린다. 사실 병원 문과 다를 바가 없는데, 그래서 병원 문에 사용한 코드를 재활용하기로 했다.
protected:
//문열림 연출용 함수
UFUNCTION()
virtual void DoorOpenTimeLineFunc(float Output);
//문 메시
UPROPERTY(EditDefaultsOnly, meta = (AllowPrivateAccess = true))
UStaticMeshComponent* DoorMesh;
병원 문 액터에서 타임라인에 의해 문을 여는 함수를 virtual 함수로 만들고 이 함수와 방 문 메시를 protected로 변경했다.
//ResearchDoor.h
UCLASS()
class AResearchDoor : public AHospitalDoor
{
GENERATED_BODY()
public:
AResearchDoor() : AHospitalDoor() {}
protected:
virtual void DoorOpenTimeLineFunc(float Output) override;
};
//ResearchDoor.cpp
void AResearchDoor::DoorOpenTimeLineFunc(float Output)
{
//여닫이문인 원본 코드를 바꿔 미닫이문으로 만든다.
const FVector Value = FVector(0, Output, 0);
DoorMesh->SetRelativeLocation(Value);
}
그 다음 병원 방 문을 상속받아서 연구소 방 문의 코드를 만들었다. 매우 짧다. 여닫이문이 미닫이 문이 됐고 문 메시의 형태만 다르기 가능한 일이다.
E. 철장 문 관리 액터


이 액터는 철장 문 근처에 있다. 지금은 상호작용을 하면 바로 문이 열리지만, 스테이지 3은 퍼즐을 푸는 것이 메인 기믹이다. 그래서 정답 입력 UI가 구현되면 문이 열리는 것이 아니라 대신 정답을 입력하는 UI를 띄우도록 변경해야 한다.
'언리얼엔진 학습 및 과제' 카테고리의 다른 글
| 팀 프로젝트 슈터 게임 (7) (0) | 2025.11.12 |
|---|---|
| 팀 프로젝트 슈터 게임 (6) (1) | 2025.11.11 |
| 팀 프로젝트 슈터 게임 (4) (0) | 2025.10.31 |
| 팀 프로젝트 슈터 게임 (3) (0) | 2025.10.30 |
| 팀 프로젝트 슈터 게임 (2) (0) | 2025.10.29 |