언리얼엔진 23

언리얼엔진 강좌 70 [쥐를잡자-06] 내 순서가 되면 잡았다 혹은 놓쳤다 결정하기

MC가 이번엔 몇 번쨰 플레이어가 할 차례다 라고 하면 그게 내 순서인지 확인한 다음 내 순서가 아니면 그냥 무시하고 가만 있고, 내 순서면 잡았다 혹은 놓쳤다 둘 중 하나를 선택합니다. 이 때 블루프린트의 Random Integer In Range 함수를 이용합니다. 0-1 사이의 숫자를 랜덤으로 만들고, 0이면 잡았다이고, 1이면 놓쳤다로 생각합니다. 실제로 사람이 이 게임을 하면 플레이어간 약 1초 정도 사이를 두고 진행됩니다. 세마리! - 1초 - 잡았다 - 1초 - 놓쳤다 - 1초 - 잡았다 - 1초 - 잡았다 - 1초 - 만세 이렇게 각 플레이어마다 1초 정도 사이가 있는거죠. 그래서 이 게임에서도 이용해 1초 뒤에 행동을 하도록 타이머를 둡니다. https://www.youtube.com/w..

언리얼엔진 강좌 65 [쥐를잡자-01] 쥐를잡자 찍찍찍 계획, 설계

신서유기라는 예능 프로에서 "쥐를잡자 쥐를잡자 찍찍찍" 게임 하는 것을 보고 언리얼엔진4 블루프린트로 개발해 보고 싶어 만들어 봤습니다. https://www.youtube.com/watch?v=xtp-KtxzVfY 쥐를잡자 찍찍찍의 룰을 간단하게 설명하면, 첫번째 사람이 잡아야 할 쥐의 수를 말하고 (예: 다섯마리!) 그 다음 사람부터 "잡았다" 혹은 "놓쳤다"를 말합니다. 만약 "잡았다"라고 말했다면 마음 속으로 쥐의 수를 하나 줄여줍니다. (예: 5 - 1 = 4마리 남음) 이런 식으로 쭉 진행하다 쥐를 다 잡아서 쥐가 0마리가 되면 "만세"라고 하면 됩니다. 이 게임은 블루프린트 버전으로 만들고, C++ 버전으로도 만들어 올릴 계획입니다.

언리얼엔진 4 C++강좌 007 [actor-07] 액터에서 이벤트 발생시키기

내가 만든 actor인 LampActor에 이벤트를 추가합니다. 그리고 레벨 블루프린트와 연결되는 ScriptActor를 만들어서 LampActor에서 발생하는 이벤트를 LevelScript Actor에서 받아 처리하는 방법을 설명합니다. // LampActor.h DECLARE_EVENT(ALampActor, FLightSetEvent) // LampActor.h public: FLightSetEvent& OnLigthSet() { return lightSetEvent; } private: FLightSetEvent lightSetEvent; 램프 액터의 헤더 파일에 위와 같이 이벤트를 선언합니다. // LampActor.cpp lightSetEvent.Broadcast(); 위 코드로 이벤트를 발생시..

언리얼엔진 4 C++강좌 004 [actor-04] 가까이 다가가면 자동으로 불이 켜지는 램프 액터 만들기

가까이 다가가면 자동으로 불이 켜지는 램프 액터를 만들어 봅니다. C++로 램프 액터를 만든 다음 box component를 추가하고 그 box에 뭔가 overlap 되는 이벤트가 발생하면, 그 이벤트를 처리해 램프에 불을 켜는 처리를 해 봅니다. 또한 overlapEnd 이벤트도 처리해 멀어지면 자동으로 불이 꺼지게 만들어 봅니다. 먼저 박스 컴퍼넌트를 추가해 봅니다. // LampActor.h UPROPERTY() UBoxComponent* m_pBox; 그리고 박스에서 발생하는 이벤트를 받기 위해, OnOverlapBegin 이벤트와 OnOverlapEnd 이벤트를 아래와 같이 정의합니다. // LampActor.h UFUNCTION() void OnOverlapBegin(UPrimitiveComp..

언리얼엔진 4 C++강좌 005 [actor-05] C++ 클래스의 재사용성 - 다른 프로젝트에서도 사용 가능할까?

cpp01 프로젝트에서 LampActor 클래스를 만들어 동작하는 것까지 확인했는데, 이 클래스 헤더 파일과 cpp 파일을 복사해서 다른 프로젝트에 추가해 놓으면 똑같이 동작하도록 만들 수 있을까요? 답은 물론 당연하다 입니다. 클래스를 만들어 쓰는 이유 중 하나가 재사용성 때문인데, 클래스 파일 복사해 놓으면 당연히 똑같이 동작해야지요. LampActor 클래스의 재사용성을 확인하기 위해 새로운 프로젝트를 만들고 그 프로젝트에서 LampActor 클래스를 재사용하는 방법을 보여줍니다. 사실 한가지만 신경쓰면 되는데, 헤더 파일에 //LampActor.h UCLASS() class CPP01_API ALampActor : public AActor { "class" 예약어 뒤에 CPP01_API 처럼 기존..

언리얼엔진 4 C++강좌 006 [actor-06] 에디터에서 설정하면 실시간으로 액터에 반영되도록 하기

에디터에서 빛의 세기를 바꾸면 실시간으로 그 값이 클래스의 인스턴스에서 반영되도록 수정해 봅니다. 위 그림과 같이 우리가 만든 클래스에 빛의 세기를 조절하는 변수를 둘 수 있고, 에디터에서 보여줄 수도 있는데, 에디터에서 "빛의 세기" 값을 조절해도 에디트 중에는 그 값이 실시간으로 보여지질 않습니다. 그러니까, "빛의 세기" 값을 바꾸면 에디트 타임에도 반영이 되었으면 하는 것이죠. 이게 언리얼엔진과 c++에서 가능합니다. // LampActor.h virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; 위와 같이 헤더 파일에 PostEditChangeProperty 함수를 선언하고, // Lam..

언리얼엔진 강좌 63 [damage-04]에너지바 만들어 적군에 달아주기

쌩초보를 위한 언리얼 엔진 4 강좌입니다. 언리얼 엔진 강의 63번째, 총쏘고 데미지 입기 시리즈의 4번째 시간입니다. Enemy, 적군이 총알을 맞으면 에너지가 줄어들었다는 것을 시각적으로 보여주기 위해 거의 모든 프로그램이 에너지바를 표시해 줍니다. 이번 시간에는 우리도 그 에너지바를 만들어 적군의 머리 위에 달아주겠습니다. BP_Enemy 적군 캐릭터에 Widget 컴포넌트를 추가하고, 유저 인터페이스 - 위젯 블루프린트를 선택해서 실제 UI를 만들어 준 다음 Widget 컴퍼넌트에 실제 UI를 연결해 줍니다. 이번 시간에는 이렇게 에너지바를 만들어 적군 머리 위에 올려주는 것까지 하고 다음 시간에 실제로 총알에 맞으면 에너지가 줄어들다가 죽는 부분의 블루프린트까지 완성하겠습니다. 언리얼 엔진 버전..

언리얼엔진 강좌 61 [damage-02] 총알 움직이기

쌩초보를 위한 언리얼 엔진 4 강좌입니다. 소스코드: github.com/easyprogstudy/unreal_damage 단계별로 올리지 않고 최종 버전만 올려 놓았습니다. 언리얼 엔진 강의 61번째 시간으로 총쏘고 데미지 입기 시리즈의 2번째 시간입니다. 이번 시간에는 총알을 위한 BP_Bullet 블루프린트 클래스에 Projectile Movement (발사체 움직임) 컴포넌트를 추가해 총알을 움직이도록 만들어 줍니다. 총알 객체에 Projectile Movement를 추가해 주면 움직이게 되는데, Initial Speed 값을 10,000 정도의 값을 주면 총알처럼 움직이게 됩니다. 총알이 일직선으로 날아가도록 하기 위해 Projectile Gravity Scale의 값을 0으로 설정해 주었습니다..