본문 바로가기

게임프로그래밍/실습1

(79)
[언리얼 실습] 39. 액터가 부셔질 때 효과음을 내고 사라지게 하기 목차블루프린트에서 사운드 재생하기액터가 부서지면 사라지게 하기1. 블루프린트에서 사운드 재생하기 이전에 에너미가 Hit 할때 발생하는 효과음은 C++에서 재생하였다. 이번에는 블루프린트에서 재생해보려고 한다.  Breakable 액터의 이벤트 그래프로 들어가자. 전에 C++와 블루프린트 모두에서 사용할 수 있는 함수를 만들었다. 이곳에서 사운드를 재생할 것이다.  위와 같이 노드들을 연결해주자. 이렇게 하면 사운드가 재생되는 것을 볼 수 있다.2. 액터가 부서지면 사라지게 하기 대부분 (사실상 모든) 게임에서 부서질 수 있는 물체가 부서지고 나면 일정 시간후 사라진다. 계속 남기면 리소스를 계속 차지 할 것이고 이것은 최적화의 측면에서 좋지 못하다. 그렇기 때문에 액터가 부서지면 일정 시간 후 사라지게 ..
[언리얼 실습] 38. C++와 블루프린트에서 설정가능한 함수 만들기 목차BlueprintNativeEvent1. BlueprintNativeEvent 히트 후 소리를 재생하고 싶다. 히트 반응은 C++에서 구현하지만 사운드는 C++가 아닌 블루프린트에서 설정을 하고 싶다. 이 경우에 어떻게 해야할까? GetHit함수를 C++에서도 구현하고 블루프린트에서도 구현을 하고 싶다.  하지만 현재 GetHit는 블루프린트에서 설정이 불가능하다. 인터페이스에서 상속받고 있는데 인터페이스에서 설정은public: virtual void GetHit(const FVector& ImpactPoint) = 0; UFUNCTION 매크로 조차 존재하지 않는다. 그래서 이제 이 함수를 바꿀 필요가 있다. 이제 UFUNCTION 매크로를 추가해주자. public: UFUNCTION(Bluepri..
[언리얼 실습] 37. 파괴가능한 액터 목차 C++ 파괴 가능한 액터 만들기블루프린트 파괴 가능한 액터 만들기1. C++ 파괴가능한 액터 만들기 현재 우리는 파괴가능한 매시, 지오메트리콜렉션을 만들었고 이를 기반으로 액터를 생성하려고 한다. 액터로 만드는 이유는 이 매시에 여러가지 기능을 주기위해서인데 대표적으로 전에 말했던 파괴시 카메라 충돌 방지등을 구현할 것이다.  해당 콜렉션을 AI든 플레이어든 소유할 일이 없으니 그냥 Actor 기반 C++ 클래스로 만들면 된다. 클래스를 생성하고 가장 먼저 필요한 것은 구성요소 일 것이다.  private: UPROPERTY(VisibleAnywhere) class UGeometryCollectionComponent* GeometryCollection; 이제 생성자에서 실제로 할당해주자. #incl..
[언리얼 실습] 36. 무기로 필드 시스템 생성하기 목차무기로 파괴가능한 매시 부수기1. 무기로 파괴가능한 매시 부수기 전의 포스트에서 필드시스템액터를 이용해서 파괴가능한 매시를 부수었다. 이번에는 필드시스템액터가 아닌 무기를 통해 이를 구현해보도록 하자. 비주얼스튜디오를 키고 웨폰 헤더파일로 들어가자. UFUNCTION(BlueprintImplementableEvent)void CreateFields(const FVector& FieldLocaion); C++에서는 단순히 함수를 호출만 하고 구현은 블루프린트에서 할 거라 BlueprintImplementableEvent 속성을 주었다. 필드를 생성하기 좋은 곳은 어디일까? 무기가 무언가와 부딪힐 때일 것이다. void AWeapons::OnBoxOverlap(){ // 생략 if (HitResult...
[언리얼 실습] 35. 필드 시스템 액터 목차Field System Actors1. Field System Actors 이번에는 매시를 단순히 떨어뜨리는 것이 아닌 다른 방식으로 부셔보려고 한다. 필드시스템으로 부시는 것을 볼 것인데 추후에는 공격시 무기에서 이것과 방식으로 액터를 부실 것이다.  필드시스템 액터를 기반으로 블루프린트 클래스를 만들어보자.  그러면 이렇게 필드시스템 컴포넌트를 가지고 있는 클래스가 만들어진다. 필드시스템 컴포넌트는 게임물리학에 영향을 끼칠 수 있는 필드를 생성할 수 있는 컴포넌트라고 한다.  필드 시스템 컴포넌트를 가지고 와 컴포넌트와 Add Transient Field 함수를 연결하자. 연결 되었으면 Enable Field 에 체크를 하고 피직스 타입을 External Strain으로 바꾼다. 이렇게만 한다고 ..
[언리얼 실습] 34. 부실 수 있는 오브젝트 만들기 목차파괴 가능한 매시1. 파괴 가능한 매시 이번에는 공격시 파괴가 되는 오브젝트를 만들어보려고 한다.  언리얼 에디터 상단에 모드를 보면 Fracture 모드가 있는 것을 볼 수 있다.  프랙쳐 모드를 키면 이렇게 다양한 도구들이 뜨는 것을 볼 수 있다. 매시를 프랙쳐하기 위해서는 먼저 프랙쳐할 매시를 선택해야 한다.  이 항아리 매시를 파괴해보려고 한다.  스태틱 매시를 선택한 상태로 좌측 상단을 보면 New 아이콘이 있는데 이것을 통해 새로운 지오메트리 콜렉션을 만들 수 있다.  지오메트리 콜렉션을 만들어보자. 이름은 알아보기 쉽게 바꾸는 편이 좋다.  매시가 지오메트리 콜렉션으로 바뀌면서 겉모습도 변하는 것을 볼 수 있다. 이제 이것을 쪼갤 수 있다.  좌측의 도구를 보면 다양한 방식으로 프랙쳐를 ..
[언리얼 실습] 33. 무기 궤적 남기기 목차공격 애니메이션 재생속도 높이기무기에 trail 추가하기트레일을 그릴 소켓 만들기1. 공격 애니메이션 재생속도 높이기 공격을 할때 무기에 궤적을 추가해 조금 더 그럴듯해보이는 효과를 줄것이다. 그전에 현재 공격속도가 너무 느려 애니메이션의 재생속도를 조절해 공격속도를 높여보려고 한다.  캐릭터의 공격 몽타주에 들어간 다음 플레이 레이트를 높여 애니메이션의 재생 속도를 높일 것이다.  재생속도를 바꾸면 이렇게 노티파이들이 엉망이 된다. 이것을 다시 재배치하고 마치도록 하자.2. 무기에 trail 추가하기 이제 공격할때 무기에 궤적을 추가해보자. 무기의 궤적 또한 노티파이에서 추가할 수 있다.   트랙을 추가하고 그곳에서 우클릭을 하여 노티파이 스테이트에서 Trail을 추가할 수 있다.  궤적을 추가할 ..
[언리얼 실습] 31. C++에서 히트시 메타사운드 재생하기 목차메타사운드를 담을 변수 선언하기 HitSound 재생하기거리에 따른 감쇠 적용하기1. 메타사운드를 담을 변수 선언하기 Hit시 메타사운드를 재생하기 위해서 가장 먼저 메타사운드를 담을 변수를 설정해야한다.USoundBase 타입은 사운드큐, 메타사운드 둘 모두의 베이스 타입이다. private: UPROPERTY(EditAnywhere, Category = "Sound") USoundBase* HitSound; 히트 사운드의 경우 디폴트 클래스에서도 설정하지만 인스턴스마다 다르게 설정하게 될 수도 있기 때문에 EditAnywhere 속성을 주었다. 이제 이것을 재생하기만 하면 된다.2. HitSound 재생하기 에너미 클래스에는 타격시 반응을 구현하는 GetHit() 함수가 존재한다. 이곳에서 사운드..
[언리얼 실습] 30. 1회 공격 당 1히트만 하기 목차공격 한번에 히트 한번1. 공격 한번에 히트 한번 현재 히트 이벤트가 중복으로 발생한다. 공격을 했을때 한번 휘두르면 한번만 맞는게 대부분의 게임에서 정석일 것이다. 그렇기에 그것을 구현하려고 한다. // 무기.cppvoid AWeapons::OnBoxOverlap(//생략{// 중략 if (HitResult.GetActor()) { IHitInterface* HitInterace = Cast(HitResult.GetActor()); if (HitInterace) { HitInterace->GetHit(HitResult.ImpactPoint); } }} 현재 무기 클래스의 오버랩 함수를 보면 hitresult에서 액..
[언리얼 실습] 29. 백터의 외적을 통해 Hit 방향 알아내기 목차외적이란?외적을 통해 히트 방향 알아내기c++에서 적용하기1. 외적이란? 백터의 외적은 3차원 공간에서 백터와 백터끼리 곱한 것으로 크기만 있는 내적과 달리 크기와 방향 모두 존재한다. 그리고 이 방향은 오른손 법칙을 통해 알아낼 수 있다. 전자기학에서도 이 오른손 법칙이 쓰이는데 재밌는 점은 백터의 외적 자체가 자기장 속 전하가 받는 힘의 크기와 방향을 구할 때도 쓰인다고 하니 본질적으로는 둘이 같은 것이라고 볼 수도 있을 것 같다. (출처) 외적은 크기와 방향 모두 구할 수 있지만 현재 알고 싶은 것은 방향이기 때문에 오른손 법칙이 주요하게 쓰일 것이다.2. 외적을 통해 히트 방향 알아내기 백터의 내적은 그 특징상 양수의 값만 나오고 그렇기 때문에 이것만으로는 히트의 방향을 정확히 알 수가 없다...