Strafing이란? https://www.youtube.com/watch?v=opTRLl9yU8g 위 영상을 보면 strafing이 잘 나타나있다 적 AI가 공격을 하지 않고 대기중일 때 가만히 서서 대기하는 것이 아니라 일정 조건에 따라서 옆걸음질을 하며 대기하는 것이다 여기서 옆걸음질을 Strafing이라고 한다 이 영상을 보면 enemy가 공격을 하고 잠시 대기상태에 있을 때 가만히 서있기만 한다 그게 되게 어색하게 느껴지기 떄문에 Strafing을 구현해보았다 처음에는 먼저 어떤 조건에 따라 Strafe를 진행해야할지 감이 안잡혀서 Strafing을 구현 완료한 유튜브를 많이 봤다 AI가 일정 거리에서 타겟을 인식하면 다가와서 근처에서 Strafing을 하다가 AI가 타겟의 뒤쪽으로 가게 되면 ..
공격하는 Enemy AI의 수를 제한해보자 Enemy AI 를 만들었는데 Enemy가 10명이면 거리조건이 충족되는 모든 Enemy들이 나에게 달려들어서 공격을 하기 시작한다 근데 한 번에 10명이 달라붙어서 공격하면 나는 그냥 도망가거나 당하고 있는 수밖에 없다 ㅠㅠ 그래서 나를 공격하는 적의 수를 제한해보았다 Instance Synced란 언리얼 엔진 문서에 따르면 값을 동기화시키는 것을 말하는데 이 기능을 사용해보았다 Instance Synced는 같은 블랙보드를 사용하는 AI끼리 값을 공유하는 것을 말한다 언제 주로 사용하냐면 FPS게임에서 적 하나가 나를 발견했다고 가정한다 그리고 해당하는 적이 포함된 팀에게 나의 위치를 알려주고 곳곳에 퍼져있던 적 팀들이 나를 공격하게 만들고 싶을 때 이 In..
https://youtu.be/2MPlEhzdaec 제작 기간 12주 개발 환경 언리얼4 장르 액션 RPG email yeonjindo98@gmail.com
베지에 곡선을 사용해보았다 보통 화살의 궤적을 그릴 때 자연스러움을 위해서 많이 사용하는 것 같았다 나는 보스의 스킬을 만드는데 베지에 곡선을 사용했다 보스 스킬 중에 광범위 공격으로 해당 범위 내의 무작위 지점에 불덩이를 날리는 것이다 그 불덩이의 궤적을 베지에 곡선을 사용해서 구현했다 먼저 베지에 곡선에 대해서 공부할 필요가 있다 베지에 곡선 (Bezier Curve) 일단 곡선을 그리는 공식인데 매개 변수에 따라 그려지는 곡선이다 주어지는 특정한 점에 따라서 곡선이 그려지는 것이다 그래서 게임 프로그래밍에서는 원하는 궤적을 따라 물체를 움직이고 싶을 때 많이 사용된다 시작점과 끝점을 제외하고 주어지는 점의 개수에 따라서 n+1차 베지에 곡선이 된다 공식 몇 가지 나올건데 이 공식에서 t 는 시간 (..
Object Pooling 사용 이유 단편화 방지 매번 객체를 생성하고 지우고를 반복하면 메모리 단편화 생길 확률이 높아진다 그를 방지하기 위해 사용한다 연속적 지역성을 만들어준다 최초에 필요한 메모리가 크다는 단점이 있다 객체화 되면 안되는 클래스 UClass(Abastract) Abstract를 붙이면 객체화 될 수 없는 클래스 카메라 애니메이션 마우스 오른쪽 클릭 -> 기타 -> 카메라 애님 Movement Track 추가로 카메라 움직임 저장 0초에 카메라 위치 기본 키 지우기 프리뷰 카메라 위치 설정하고 키추가 (엔터) 초 움직이고, 프리뷰 카메라 위치 정하고, 엔터 Soft Reference soft object ptr 직접적으로 주소를 가지지 않는다 객체는 없지만 주소만 마킹해둔다 약연결 강..
구조체 중에 GENERATED_BODY 를 갖는 구조체 ( 직렬화된 구조체 )라면 반드시 클래스 위에 있어야한다 BlueprintNativeEvent C에서 기본 기능을 제공해주고 블프에서 할 일이 있으면 재정의해서 써라 ~ UFUNCTION(BlueprintNativeEvent) void Eqeuip(); void Equip_Implementation(); Native는 Implementation을 붙여서 기본 정의를 해준다 UObject는 NewObject로 동적할당 UObject를 직접 상속받은 애는 자신의 World가 없다 UCLASS(Abstract) 클래스가 어떠한 기능도 없고 객체화 되면 안될 때 Abstract를 붙여서 추상으로 만들어준다 상속에 의해서만 구현된다 NotBlueprintab..
https://youtu.be/g3VWtMoUszQ BackRoll, 무기 장착(Attachment) WeaponComponent , Weapon Asset 서로 다른 그룹을 묶어주는 인터페이스 순수 가상 함수로만 구성된 클래스 문이 열리면 어떤 이벤트를 발생시킬 때 문이 열릴 때 -> 바퀴벌레 도망가고 물건 떨어지고 불 켜지는 이벤트 추상 클래스는 객체화 될 수 없다 상속을 통해 자손 클래스에서 구현한다 추상과 가상 추상은 선언만 되어있다 가상은 구현만 되어있다 객체가 UObject로부터 직접 상속을 받았을 경우 객체가 생성이 되었다가 쓰지 않으면 끊긴걸로 간주하고 가비지 컬렉터에서 지워버린다 따라서 직렬화를 통해 계속 사용하는 존재로 만들어줘야한다 UCLASS() class CPORTFOLIO_API..
https://youtu.be/LRyB3lF719I 플레이어의 기본 움직임 멈출 때 갑자기 멈추지 않고 서서히 멈추도록 Character Movement의 Ground Friction, Bracking Deceleration Walking, Max Acceleration 조정 UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) ClassGroup = (Custom) 블루프린트에서 컴포넌트를 추가할때 띄울 카테고리 이름 meta=(BlueprintSpawnableComponent) 메타데이터 지정자 블루프린트 내에서 추가가능하게 할건지 말건지 ! BlueprnitInternalUseOnly 상속받아서만 사용할 수 있는 상속 전용 이 함수는 ..