전체 글 1244

사원수의 회전 (2)

- 개요회전 사원수 q를 사용하여 임의의 회전축 n에 대해 3차원 공간의 벡터 v를 각 θ만큼 회전시키는 방법을 알아본다 - 전개1) 문제점3차원 공간의 벡터 v는 순허수 사원수에 대응되는 개념이다벡터 v의 값을 (x, y, z)로 표시하고, 회전축 n의 값을 (a, b, c)로 지정한다이때 회전축은 단위 벡터이므로 a2 + b2 + c2 = 1의 조건을 지닌다그리고 회전축 n으로 각 θ만큼 회전시키는 회전 사원수 q는 (cosθ, sinθ · n)의 값을 지닌다 따라서 회전 사원수 q를 사용하여 벡터를 회전시키는 방법은 다음과 같은데, 회전 사원수를 벡터의 왼쪽에 배치하고 둘을 곱하는 것이다이때 사원수의 곱셈은 교환법칙이 성립하지 않으므로 곱하는 순서에 항상 신경써야 한다그러나 계산 결과에서 알 수..

사원수의 회전 (1)

- 개요 허수 i를 통하여 전개한 오일러 공식은 위와 같다이때, 오일러 공식의 우변은 복소평면에서 회전 변환을 담당하는 단위 복소수로 사용하였다따라서 좌변의 자연지수함수는 복소평면에서의 회전 변환을 의미하게 된다사원수에서도 동일하게 허수 i와 동일한 수가 있다면 오일러 공식을 만족할 수 있을 것이다 - 사원수와 오일러 공식 크기가 1인 순허수 사원수도 허수 i와 동일하게 크기가 1이면서 제곱한 값이 -1이다이때 크키가 1인 순허수 사원수를 qn으로 지정한다그리고 지정한 사원수의 요소를 (0, n)으로 표시하면 위와 같이 식을 유도할 수 있다 순허수 사원수의 제곱을 전개하면 위와 같다이때 n 벡터끼리의 내적 값은 1이고 평행한 벡터의 외적은 영벡터이므로위와 같이 간단하게 표현할 수 있다최종적으로 순허수 ..

적 추가 - 2) 탱크 적의 추가

- 개요기존의 적들에 보호막으로 둘러쌓여 있는 탱크 적을 추가한다 - 스크립트 작업1) Enemy_Base 클래스 EnemyType 구조체에 Tank 변수를 추가하여 탱크 적의 타입을 설정할 수 있도록 구성한다 Awake 함수를 위와 같이 수정하여 상속할 수 있도록 설정한다 2) Enemy_Tank 클래스 탱크 적의 클래스를 생성하고 위와 같이 멤버변수를 설정한다shieldAmount 멤버변수 : 탱크 적이 사용할 배리어의 양tankShield 멤버변수 : 탱크 적이 사용할 배리어 Awake 함수를 위와 같이 오버라이드하여 탱크 적에 대한 보호막을 설정한다 3) TankParts 클래스 탱크 적에 적용된 보호막으로 사용할 TankParts 클래스를 생성한다IDamageable 인터페이스를 상속하여 피..

적 추가 - 1) 무리지어 오는 적의 추가

- 개요이전에 존재하던 적들에 무리지어 오는 적을 추가한다 - 스크립트 작업1) Enemy_Base 클래스 EnemyType 열거형에 위와 같이 Swarm 값을 추가하여 무리지어 오는 적의 타입을 설정한다 2) Enemy_Swarm 클래스 Enemy_Base 클래스를 상속받은 Enemy_Swarm 클래스를 생성하여 무리지어 오는 적을 정의한다 3) SwarmParts 클래스 무리지어 오는 적들에게 적용할 시각 효과와 관련된 SwarmParts 클래스를 생성한다멤버변수는 위와 같다variants 멤버변수 : 무리지어 오는 적들의 3가지 외형 타입bounceCurve 멤버변수 : 무리지어 오는 적들에게 튀어다니는 애니메이션을 적용할 애니메이션 커브bounceSpeed 멤버변수 : 무리지어 오는 적이 튀어다닐..

프로젝트 세팅 - 7) Lyra 기반의 애니메이션 설정 (3)

- 개요공격 기능을 추가하여 플레이어가 키를 입력하면 공격할 수 있도록 설정한다단, 이전과는 다르게 기능을 설정하여 애니메이션 몽타주를 사용하여 구성한다애니메이션 몽타주는 애니메이션 내에서 복합적인 기능을 수행하기 위해 사용한다특히, 하나의 프레임에서 유용한 Notify와 한 구간의 프레임들에서 유용한 Notify State를 사용할 수 있다 - 스크립트 작업1) SOO_ActionComponent 클래스 GAS 프레임워크의 ASC 대체 클래스에 위와 같이 필요한 함수를 추가한다로컬에서 애니메이션 몽타주를 재생한 후에 서버와 클라이언트 양쪽에서 보여질 수 있도록 구성하였다 생성자에 위와 같이 로직을 추가하여 ActorComponent의 Replication을 사용하도록 설정한다 NotifyAction..

프로젝트 세팅 - 6) Lyra 기반의 애니메이션 설정 (2)

- 개요웅크리는 기능을 추가하여 플레이어가 적에게서 몸을 숨길 수 있도록 설정한다 - 스크립트 작업1) SOO_Character 클래스 생성자에 위와 같이 로직을 추가한다캐릭터 클래스의 CharacterMovementComponent에 접근하여 필요한 설정을 적용한다bCanCrouch 설정을 True로 설정하여 ACharacter의 Crouch 함수가 동작할 수 있도록 설정CrouchedHalfHeight 설정을 캡슐 컴포넌트의 반지름과 통일하여 웅크려도 캡슐 컴포넌트가 접히지 않도록 설정MaxWalkSpeedCrouched 설정을 0으로 설정하여 웅크리면 이동할 수 없도록 설정 2) SOO_PawnInputComponent 클래스 웅크리는 기능은 Ctrl 키를 누르고 있는 동안에만 수행하며 일시적으로 ..

프로젝트 세팅 - 5) Lyra 기반의 애니메이션 설정 (1)

- 개요플레이어의 입력에 따라 캐릭터의 애니메이션을 연출한다이때, 입력 시스템과 동일하게 Lyra의 애니메이션 구조를 바탕으로 애니메이션 시스템을 구성한다Animation Blueprint의 원형이 되는 AnimInstance 클래스를 생성하고해당 클래스의 내부에서 Actor나 UObject와 관련된 로직은 게임 스레드에서만 수행하고애니메이션을 갱신하는데 필요한 수학이나 멤버변수 로직은 멀티 스레드에서 계산하여수많은 플레이어의 애니메이션 연산을 분산하여 처리한다 - 스크립트 작업1) SOO_Character 클래스 기본 캐릭터 클래스의 생성자에 위와 같이 로직을 추가한다캐릭터의 캡슐 컴포넌트 + 스켈레탈 메쉬와 카메라와의 충돌을 무시하도록 설정한다따라서 카메라의 갑작스러운 줌인 현상을 차단한다 2) SO..

오디오 - 최종) 유닛의 공격 효과음 추가 + 설정 UI와 오디오 연결

- 개요유닛이 공격하면 효과음을 재생하도록 추가한다또, 설정 UI에 기능을 추가하여 게임에서 재생되는 소리들의 크기를 조절할 수 있도록 설정한다 - 스크립트 작업1) AudioManager 클래스 유닛의 음향 효과를 재생하기 위한 AudioSource 멤버변수를 추가한다 Awake 함수에 위와 같이 로직을 추가하여 유닛의 음향 효과를 위한 AudioSource 멤버변수를 설정한다위와 같이 설정을 진행하여 입체 음향을 적용한다 PlayAttackSFX 함수를 추가하고 불리언 인자를 사용하도록 구성하여 유닛의 음향을 랜덤한 크기로 재생한다 2) Player_TowerBase 클래스 유닛의 조상 클래스에서 유닛의 공격 음향으로 사용할 오디오 클립을 멤버변수를 추가한다 3) Player_TowerCrossb..

프로젝트 세팅 - 4) 플레이어의 움직임 설계

- 개요키보드의 W / A / S / D 입력을 통해 플레이어를 움직일 수 있도록 구현한다 - 스크립트 작업1) SOO_PlayerCharacter 클래스 생성자의 로직을 위와 같이 수정한다수정한 로직은 각각 다음과 같다bOrientRotationToMovement 값을 True로 설정하여 캐릭터의 이동 방향으로 자연스럽게 회전bUseControllerRotationYaw / Pitch / Roll을 False로 설정하여 컨트롤러가 회전해도 캐릭터를 고정 bUsePawnControlRotation 값을 True로 설정하여 플레이어의 입력에 따라 카메라도 회전 PossessedBy 함수에서 진행하던 MappingContext 설정 작업을 제거하여 PlayerController에서 수행한다 2) SOO_P..

사원수 (2) 사원수와 벡터

- 개요 2개의 요소를 사용하는 복소수는 2개의 수 집합이 직교하는 복소평면으로 시각화할 수 있다하지만 4개의 수 집합을 사용하는 사원수는 4차원의 공간이므로 시각화가 불가능하다따라서 사원수를 다룰 때에는 공간을 1차원과 3차원으로 분리하고 3차원 공간의 성질을 관찰한다 - 순서쌍을 통한 사원수의 표현 사원수를 다룰 때에는 허수부를 사용하는 3개의 집합을 하나로 묶고, 실수부는 별도로 관리한다세 허수부의 계쑤를 3차원 벡터로 묶는다면 사원수는 실수와 3차원 벡터 2가지로 구성된다따라서 위와 같이 사원수를 실수와 3차원 벡터로 구성된 순서쌍으로 표현할 수 있다이때 순서쌍의 원소를 차례대로 실수부(스칼라부), 허수부(벡터부)라고 표현한다 순서쌍으로 표현한 서로 다른 사원수간의 덧셈은 하면 위와 같이 계산..