게임프로그래밍 (141) 썸네일형 리스트형 [언리얼 실습] 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. 외적을 통해 히트 방향 알아내기 백터의 내적은 그 특징상 양수의 값만 나오고 그렇기 때문에 이것만으로는 히트의 방향을 정확히 알 수가 없다... [언리얼 실습] 28. 백터의 내적을 통해 Hit 방향 알아내기 목차내적이란?내적을 통해 방향 알아내기C++로 구현하기1. 내적이란내적에 대해 수학백과사전에서는 다음과 같이 설명되어 있다.내적은 벡터공간에서 한 쌍의 벡터마다 스칼라를 대응시키는 연산이다.평면이나 공간에서는 두 벡터 사이의 각이라는 직관적인 개념을 생각할 수 있다. 일반적인 벡터공간에서도 두 벡터 사이의 각을 정의하고 두 벡터가 수직으로 교차한다는 것이 무슨 뜻인지 정의하는 데에 내적을 사용한다. 또한 내적은 길이를 정하는 데에도 사용할 수 있다. 내적을 흔히 중간에 점을 찍어 나타내기 때문에 'dot product'라고도 한다.[네이버 지식백과] 내적 (수학백과, 2015.5) 이 내적을 통해 피격을 당할 경우 피격된 방향을 알 수 있다.2. 내적을 통해 방향 알아내기 에너미가 있으면 이 에너미가 바.. [언리얼 실습] 27. 인터페이스 사용하기 목차인터페이스 상속받기상속받은 인터페이스 함수 정의하기1. 인터페이스 상속받기 에너미 클래스에서 히트 인터페이스를 상속받아 이를 구현해보려고 한다.class PRACTICE_API AEnemy : public ACharacter 에너미 클래스는 보는 것과 같이 ACharcter 클래스를 상속받고 있다. 여기에 추가로 인터페이스를 상속받아 보자. #include "Interface/HitInterface.h" 상속을 받기 위해서는 당연히 헤더파일을 가져와야 하고 class PRACTICE_API AEnemy : public ACharacter, public IHitInterface 상속은 단순히 쉼표를 쓰고 원래 상속을 받던 방식으로 상속을 받으면 된다. 히트인터페이스를 상속 받았고 그 안에는 GetHit.. [언리얼 실습] 26. 에너미 클래스 만들기 목차C++ 에너미 클래스 만들기블루프린트 에너미 클래스 만들기 에너미 클래스를 생성하고 이를 정의해보자. 에너미 클래스에 제일 먼저 구현할 것은 Hit 반응이다. Hit를 하기 위해서는 콜리전 세팅이 필요한데 현재 무기의 박스 컴포넌트는 Pawn타입을 무시하고 있으며 박스트레이싱의 경우 가시성 채널을 차단하고 있으므로 이러한 부분들을 수정해주어야 한다. #include "Components/SkeletalMeshComponent.h" // 스켈레톤 매시를 사용하기 위해 필요한 헤더파일AEnemy::AEnemy(){ PrimaryActorTick.bCanEverTick = true; // 콜리전 설정을 Pawn에서 WorldDynamic으로 바꾼다. GetMesh()->SetCollisionObject.. [언리얼 실습] 25. 언리얼 인터페이스 만들기 목차인터페이스란?언리얼 인터페이스 만들기1. 인터페이스란? 인터페이스는 클래스나 객체의 구조를 미리 설정하고 이를 상속 받은 클래스나 객체가 해당 속성을 반드시 구현하도록 하는 것을 말한다. 인터페이스 자체는 실제 구현을 하지는 않고 메서드의 이름과 인자, 반환값만 정의하는데 이것을 추상화라고 한다. 추상화되어 있기 때문에 인터페이스를 상속 받는 클래스에서 각각 필요한 기능들을 구현해서 사용할 수가 있고 이를 다형성이라고 한다. 인터페이스를 통해 여러 클래스에서 같은 규칙을 따를 수 있게 되기 때문에 코드의 일관성을 유지할 수 있으며 이는 객체지향언어의 핵심적인 특징 중 하나이다. C++에는 인터페이스가 존재하지 않지만 순수가상함수를 통해 이를 구현할 수 있는데 순수가상함수란 함수가 구현되어 있지 않고 .. [언리얼 실습] 24. 공격중에만 트레이싱 하기 목차특정 상황에서만 트레이싱 진행하기1. 특정 상황에서만 트레이싱 진행하기 공격 몽타주에서 노티파이를 이용해서 공격시작지점과 종료지점을 정한 뒤 이 사이에서만 콜리전을 활성화 시킬 것이다. 공격 시작 지점과 종료지점 각각 노티파이를 추가하자. 이제 C++에서 콜리전을 활성화 시키는 방법을 알아보자. 그전에 활성화를 시키려면 먼저 비활성화 시킬 필요가 있을 것이다. 무기 cpp파일로 가서 생성자에서 콜리전을 비활성화 시키자AWeapons::AWeapons(){// 생략 WeaponBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);// 생략} 이제 캐릭터 헤더파일에서 블루프린트에서 호출이 가능한 콜리전 활성화/비활성화 함수를 만들 것이다. UFUNCTION.. [언리얼 실습] 23. 무기 히트를 위한 콜리전 박스 추가랑 트레이싱 추가하기 목차콜리전 박스 만들기트레이싱 준비c++에서 트레이싱 하기1. 콜리전 박스 만들기 충돌을 감지하기 위해서는 충돌을 일으킬 수 있어야 하고 그렇게 하기 위해 콜리전 박스를 만들 것이다. 비주얼 스튜디오로 들어가자 // 무기.hprivate: UPROPERTY(VisibleAnywhere) class UBoxComponent* WeaponBox; 박스 컴포넌트를 선언해주자. 이제 생성자에서 이를 정의해주어야 한다. #include "Components/BoxComponent.h"AWeapons::AWeapons(){ WeaponBox = CreateDefaultSubobject(TEXT("Weapon Box")); WeaponBox->SetupAttachment(GetRootComponent());} 이제.. [언리얼 실습] 22. C++에서 아이템 습득시 사운드 재생하기 목차 C++에서 사운드 재생하기디버그 하기1. C++에서 사운드 재생하기 C++에서 무기를 장착할때 사운드를 재생해보려고 한다. void AKnight::EKeyPressed(){ AWeapons* OverlappingWeapon = Cast(OverlappingItem); if (OverlappingWeapon) { OverlappingWeapon->Equip(GetMesh(), FName("RightHandSocket")); CharacterState = ECharacterState::ECS_EquippedOneHandWeapon; OverlappingItem = nullptr; EquippedWeapon = OverlappingWeapon; } else if (CanDisarm()) { .. [언리얼 실습] 21. 실제로 무장 해제하기 목차소켓을 추가하기c++로 무장 및 해제하기1. 소켓을 추가하여 실제로 무장 해제하기 무기를 해제해서 등 뒤로 옮기려고 한다. 그러기 위해서 캐릭터의 스켈레톤매시에 새로운 소켓을 추가하여야 한다. 캐릭터의 스켈레톤 매시에서 검을 놓기 적절한 위치를 찾아 소켓을 추가해준다. 우클릭하여 소켓을 추가해주자. 프리뷰 에셋을 추가하여 검의 위치를 잡아보자. 대략 이런 형태로 옮기고 제대로 됐는지 확인하기 위해 우측의 프리뷰 신에서 애니메이션 미리보기를 해본다. 이런식으로 애니메이션을 재생시켜 검의 위치를 잡을 수 있다. 이때 너무 정확하게 맞출 필요는 없으며 대략 비슷하게만 맞추면 된다. 이제 실제로 검을 장착하거나 장착해제해 보자.2. c++로 무장 및 해제하기 무장을 하거나 무장을 해제하는 그 시점.. 이전 1 ··· 9 10 11 12 13 14 15 다음