전체 글 403

[UE4] Targeting

📚 Targeting 플레이어의 앞에 Enemy 여러명 위치해있을 때, 일정 타겟팅 범위 내에 존재하는 Enemy 중 Camera Front 방향으로부터 가장 가까운 Enemy를 타겟팅하는 기능을 구현해보았다. Targeting을 구현하는 모든 내용은 TargetComponent를 생성하여 그 안에서 구현한 뒤, 플레이어의 컴포넌트로 추가해주었다. 1. 타겟 범위 내 Enemy 찾기 플레이어를 중심으로 Trace Distance(1000) 범위 이내에 존재하는 Enemy를 찾기 위해 MultiSphereTracceByProfile 함수를 사용하였다. MultiSphereTracceByProfile 함수는 특정 profile을 사용하여 범위내에 충돌되는 Hits 배열을 반환해준다. 프로젝트 세팅의 콜리전에..

[UE4] 외적(Cross), Sign함수

🔝 외적 (Cross) 외적은 두 벡터에 직각이되는, 즉, 수직하는 벡터를 만들어주는 연산으로 연산 결과 수직 벡터(Vector3)를 반환한다. (외적은 두 벡터에 수직하는 벡터가 나오므로 2D 공간에서는 외적이 없고, 3D 공간에서만 외적이 있다) 외적은 A Cross B 로 외적할 때 A와 B의 순서에 따라 수직하는 벡터의 방향이 반대로 나오기 때문에 외적 순서가 매우 중요하다. 외적 결과로 나온 수직축의 길이(z축)가 양의 값이면 A 위치로부터 B위치가 오른쪽에 위치한 것이고, 수직축의 길이가 음의 값이면 왼쪽에 위치한 것이다. 2D공간에서 자주 사용해왔던 내적은 특정 범위 내에 위치값이 존재하는지만 판단할 수 있고, 좌우를 판단할 수는 없다. 그러나 외적은 좌우를 판단할 수 있기에 3D 프로그래밍..

[C++] 가상 함수 테이블, 접근 제어(protected,private), 추상화 기초 클래스, 순수 가상 함수, 디폴트 생성자, 객체리턴/참조리턴, 기초클래스 파괴자, 프렌드 상속

가상 함수 테이블 (Virtual Function Table, VTBL) - 컴파일러가 가상 함수를 다룰 때 각각의 객체에 숨겨진 멤버를 하나씩 추가하고, 숨겨진 멤버를 함수의 주소들로 이루어진 배열을 지시하는 포인터로 저장하는 것이다. - 즉, 가상 함수 테이블에는 클래스의 객체들을 위해 선언된 가상 함수들의 주소가 저장됭 있다. 접근 제어 : protected, private - 파생클래스의 멤버들은 기초클래스의 protected 멤버에 직접 접근할 수 있지만, private 멤버에는 직접 접근할 수 없다. - protected 멤버들은 바깥 세계에서 보면 private 멤버처럼 행동하지만, 파생 클래스의 입장에서 바라보면 public 멤버와 같이 행동한다. - 가능하다면 protected 접근 제어..

📚책읽기 2023.02.14

[C++] 다형, 가상메서드, 정적결합/동적결합, 업캐스팅, 다운캐스팅

다형 (Polymorhphic) - 다형이란 호출하는 객체에 따라 메서드의 행동이 달라질 수 있는 경우, 즉, 처한 상황에 따라 메서드가 여러 가지 다른 행동을 할 수 있어 여러가지 형식을 가지고 있는 복잡한 행동을 의미한다. 가상 메서드 - 어떤 메서드가 기초 클래스에서 가상으로 선언되었을 때, 그것은 파생 클래스에서 자동으로 가상 메서드가 된다. - 파생 클래스의 선언에서도 virtual 키워드를 사용함으로써, 어떤 함수들이 가상인지 표시해두는 것이 바람직하다. 정적결합, 동적결합 (Binding) - "함수 이름을 결합한다"라는 말은 소스코드에 있는 함수 호출을 특정 블록에 있는 함수 코드를 실행하는 뜻으로 해석하면 된다. - 정적 결합(static binding) / 초기 결합(early bind..

📚책읽기 2023.02.14

[C++] 큐, 스택, 단순 링크드 리스트, 클래스 상속, public 파생, public 상속

큐(Queue) - 큐는 항목들을 순서대로 보관하는 추상화 데이터형(ADT)이다. - FIFO(선입선출)구조로, 큐의 머리 부분에서만 큐의 삭제가 일어나고 꼬리 부분에서만 데이터 삽입이 추가된다. 스택(Stack) - LIFO(후입선출) 구조로, 스택의 동일한 한쪽 끝에서만 추가와 삭제가 일어난다. 단순 링크드 리스트(Singly Linked List) - 각 노드가 그 다음 노드를 지시하는 하나의 링크(또는 포인터)만 가지고 있는 구조 - 첫번째 노드의 주소만 알면, 그 리스트에 연결된 각 노드들이 지시하는 포인터들을 계속 추적해 갈 수 있다. - 리스트의 마지막 노드에 있는 포인터는 연결된 노드가 더 이상 없다는 뜻으로 NULL로 설정된다. 클래스 상속 (Class Inheritance) - 기초 클..

📚책읽기 2023.02.14

[DX] CubeMap 렌더링

📚 Cube Map Rendering 지금까지 다뤄왔던 이미지는 Texture 2D 였다. Texture 2D는 x방향, y방향이 하나만 존재하는 것을 말한다. Texture 3D는 x픽셀과 y픽셀이 여러 장 존재하는 것을 말한다. 이제는 Texture Cube라는 것을 렌더링 해 볼것인데, Texture Cube는 한장인데, 박스를 펼친 모양처럼 생겼다. DirectX의 왼손 좌표계와 함께 보면 큐브의 앞면은 +Z 방향, 뒷면은 -Z방향, 왼쪽은 -X 방향, 오른쪽은 +X방향, 윗면은 +Y방향, 아랫면은 -Y방향을 가지고 있다. 이처럼 한 장의 Texture에 여섯방향을 저장해놓은 Texture를 Cube Map Texture라고 한다. (Cube Map, Cube Map Texture, Texture..

🎨DirectX 2023.02.14

[BattleProject] Enemy 그룹전투, Player 방어기능

https://youtu.be/4mQpUUqKFMk 작업일지 진행중인 작업 (문제점) - 패링 애니메이션 찾기 진행 예정 작업 - 플레이어 반격 구현 진행 완료 작업 1. 일정 반경 내 플레이어 들어오면 타겟 설정 및 추격 - 추격의 시작과 끝에 따라 Enemy 무기 장착/해제 2. 일정 반경 내 플레이어 들어오면 콤보 공격 - 콤보 공격 중 범위 밖으로 나갈 시 공격 중단 - Enemy 공격 중 플레이어 공격 시 애니메이션 초기화 상태 수정 + 콤보 이어서 공격 - 플레이어와 Enemy의 체력 감소 (데미지) 및 죽음 구현 3. Enemy 그룹 전투 - Enemy 간 공격/죽음 기능 구현 - Enemy 그룹화 - 같은 그룹이면 타겟에서 제외 - 같은 그룹간 공격 시 데미지 입지 않도록 구현 - 공격중인..

[UE4] IK 구현하기 -2 (Two Bone IK(2본IK), 로컬을 컴포넌트로/컴포넌트에서 로컬로)

📐 발과 충돌된 지점의 간격 구하기 이전시간에 구현했던 LineTraceByChannel 추적값에 무언가 충돌되면 충돌된 객체와 플레이어의 발 사이 간격을 구해야 한다. Line Trace에서 Impact Point는 충돌된 지점을 가리키고, Trace End는 충돌 검사가 끝나는 지점을 가리킨다. 따라서 발과 충돌된 지점의 간격을 구하고 싶다면 Impact Point에서 Trace End 벡터를 빼면 된다. 두 개의 벡터를 뺀 길이를 구하면 위 그림에서 초록색 구간에 해당하는 간격의 거리가 나온다. 먼저 Impact Point에서 Trace End 부분을 빼면 Impact Point와 End 지점간의 길이가 나온다. 해당길이에서 Offset Distance를 빼주는데, 이 값은 임의의 값(5)으로 애니..

[UE4] ZoomIn/ZoomOut, Interp To 함수(FInterp To, RInterp To, VInterp To)

🔎 ZoomIn / ZoomOut 언리얼 게임 내에서 마우스 휠을 이용한 줌인/줌아웃 기능을 구현해보았다. 먼저, 프로젝트 세팅에서 마우스 휠 축을 이용한 축매핑 입력값을 설정해주고, BP_Player 블루프린트에서 Tick 이벤트에 Zoom에 대한 함수를 호출해주었다. Zoom 입력값이 들어오면 우선 플레이어의 무기가 활(Bow)인지를 검사하고, 활이 아닌 경우에만 줌 기능을 사용할 수 있도록 하였다. (활은 에임모드가 존재하기 때문) Zoom 기능구현에 필요한 변수들을 ZoomData라는 구조체로 만들어 사용하였는데, 그 중 Interp Speed라는 변수는 줌인, 줌아웃 시 부드럽게 축소되고 확대되는 보간 기능에 관련된 변수이다. 줌인/줌아웃을 할 때 Interp To 함수를 사용하지 않으면 마우스..

[DX] 구면 좌표계(Spherical Coordinate System)

🌏 구면 좌표계 (Spherical Coordinate System) 구면 좌표계는 3차원 공간을 한 점 (r, θ, φ)로 나타낸다. 3차원 공간을 나타내기 위해, 원점에서의 거리(r), 양의 방향의 z축과 이루는 각도(θ), z축을 축으로 양의 방향의 x축과 이루는 각(φ)을 이용하여 나타낸다. p : 원점에서 p 까지의 거리 θ : 양의 방향의 z축과 이루는 각도 φ : z축을 중심으로 양의 방향의 x축과 이루는 각 구면 좌표계를 이용하면 원점에 관하여 대칭인 문제 해결에 유용하게 사용할 수 있다. 예를 들면 지구(행성)이 태양(항성)을 공전하는 것처럼 천체의 역학적인 위치와 움직임을 기술할 때 주로 사용된다. 구면 좌표계 (r, θ, φ)와 직각 좌표계 (x1, x2, x3) 사이의 변환식은 위와..

🎨DirectX 2023.02.13

[UE4] IK 구현하기 -1 (Feet Data 구조체, Feet Trace)

⚒️ IK 구현 순서 캐릭터의 발 보다 위에 물체가 존재하면 발이 그만큼 올라가야 하고, 반대로 캐릭터의 발 아래 땅이 떨어져있다면 그만큼 발이 내려가야 한다. 이렇게 움직이는 간격을 먼저 Feet Component에서 구한 뒤, 움직일 간격을 애니메이션 블루프린트에서 가져올 것이다. 이후 애니메이션의 Component 공간에서 Two Bone IK를 이용하여 발의 위치를 움직여줄 것이다. (IK를 구현하는 내용은 매우 어려우니 차근차근 공부하자) 📚 IK 구현하기 가장 먼저, Feet Component를 만들고 Feet Data라는 구조체를 만들었다. 👣 Feet Data 구조체 LeftDistance - 왼발이 움직일 위아래 간격 - 이때 Bone의 축이 부모부터 누적되면서, 축이 회전되어 발의 윗 ..

[UE4] IK란?(Inverse Kinematic), Bone 구조, Two Bone IK 솔버(IK+FK), 애니메이션 공간(Mesh/Local/Component)

📚 IK (Inverse Kinematic) IK란 고르지 않은 지형에서 지형에 맞추어 발을 딛는 반응형 애니메이션을 구현할 수 있는 기능이다. 울퉁불퉁한 땅이나 계단을 오를 때 캐릭터의 발이 Rotation을 알아서 처리하여 제대로 놓일 수 있도록 월드에 반응하는 듯한 느낌을 구현할 수 있다. 📚 Bone 구조 -Root -Pelvis T (Transform) -Hips LT(Local Transform) * PT(Parent Transform) -Clavicle LT(Local Transform) * PT(Parent Transform) Bone의 구조는 트리형태로 저장되어 있는데 간략화하여 중요 내용만 설명하자면 트리구조가 위와 같다. - Root는 액터와 호환작용 하기 위한 가상일 뿐 실제로는 존..

🎮Unreal4/Basic 2023.02.10
728x90