전체 글 1252

프로젝트 세팅 - 최종) 달리기 추가와 핸디캡

- 개요플레이어들이 빠르게 이동할 수 있는 달리기 기능을 추가한다하지만 달리게 되면 4개의 기둥을 찍는 우승 조건에 가까워지므로 기둥을 찍을 때마다 달리기 속도를 느리게 만드는 핸디캡을 부여하도록 설정한다 - 스크립트 작업1) SOO_Action_Sprint 클래스 Shift 키를 누르는 동안 호출되는 IA에 연계되어 동작하는 행동(Ability) 클래스를 정의한다OriginalMaxWalkSpeed 멤버변수를 사용하여 캐릭터의 기본 이동속도를 저장한다 TryActivate 함수를 위와 같이 정의하여 캐릭터로부터 달릴 때의 이동속도를 가져와캐릭터의 CharacterMovementComponent에 적용하고 ActionComponent를 통해 서버 RPC를 진행한다 Cancle 함수를 위와 같이 정의하..

프로젝트 세팅 - 11) 킬스코어의 추가

- 개요킬스코어를 추가하여 게임이 종료된 후에 최고 킬스코어를 표현하도록 설정한다 - 스크립트 작업1) SOO_PlayerState 클래스 killCount 멤버변수를 추가하여 플레이어가 처치한 다른 플레이어들(AI, 유저 모두)의 수를 저장한다 2) SOO_GameModeBase 클래스 기존에 사용하던 OnPlayerDeath 함수를 개선하여 OnCharacterDeath 함수로 이름을 변경하고쓰러진 AI 캐릭터와 플레이어 캐릭터 모두 호출하도록 설정한다또, GetTopKillScore 함수를 추가하여 최고 킬스코어를 달성한 플레이어의 PlayerState를 반환한다 OnCharacterDeath 함수의 로직을 위와 같이 구성한다인자로 받은 공격자 플레이어 캐릭터의 PlayerState를 가져와 ki..

프로젝트 세팅 - 10) 승리 조건 및 승리 설정

- 개요게임에서 승리하는 조건은 2가지이다첫번째로 자신을 제외한 모든 플레이어를 쓰러뜨리면 우승할 수 있다두번째로 맵에 존재하는 4개의 빛 기둥에 닿으면 우승할 수 있다위 2개의 조건에 맞춰 승리할 수 있도록 구성한다 - 스크립트 작업1) SOO_TriggerActor 클래스 빛 기둥을 구현하는데 사용할 SOO_TriggerActor 클래스를 생성한다멤버변수는 위와 같다SceneRoot 멤버변수 : Root 컴포넌트로 사용할 컴포넌트Capsule 멤버변수 : 트리거로 동작할 캡슐 콜라이더StaticMesh 멤버변수 : 빛 기둥의 스테틱 메쉬 생성자를 위와 같이 구성하여 루트 컴포넌트와 캡슐 콜라이더, 스테틱 메쉬를 설정한다캡슐 콜라이더는 모든 물체와 충돌하면서 Overlap 이벤트를 실행하도록 설정한다..

프로젝트 세팅 - 9) AI 캐릭터 설정

- 개요플레이어처럼 행동하는 AI 캐릭터들을 구성하고 맵에 스폰하는 시스템을 추가한다 - 스크립트 작업1) 프로젝트명.build.cs 파일 위 3개의 모듈을 프로젝트 의존성에 추가하여 AI 관련 기능을 구현할 수 있도록 설정한다 2) SOO_Character 클래스 OnRep_IsDown 함수를 상속할 수 있도록 수정하여 AI 캐릭터에서 기능을 확장한다 3) SOO_DecoyCharacter 클래스 AI 캐릭터에서 사용하는 SOO_DeocyCharacter 클래스를 생성한다AI는 이동하는 것 외에도 웅크리기와 점프등의 동작을 취한다ActionComponent를 멤버변수로 사용하여 동작에 따른 행동을 수행한다 생성자를 위와 같이 구성하여 AI 캐릭터에서 사용할 AIController와 ActionComp..

적 추가 - 4) 비행 적의 추가

- 개요공중에서 소환되어 비행하는 적을 추가한다해당 적은 특정 유닛으로만 공격할 수 있도록 설정한다 - 스크립트 작업1) Enemy_Base 클래스 EnemyType 열거형에 Flying 멤버를 추가하여 비행 타입 적을 지정한다 2) Enemy_Flying 클래스 flightHeight 멤버변수를 추가하여 비행 적이 지면으로부터 떨어질 높이의 값을 설정한다 Awake 함수를 위와 같이 오버라이드하여 비행 적의 Agent의 위치를 올바른 높이로 설정한다 3) Player_TowerCrossbow 클래스 Attack 함수를 위와 같이 수정하여 석궁 타워가 특정한 Layer Mask의 적만 공격할 수 있도록 설정한다일반적인 적은 Enemy 레이어 마스크를 사용하지만, 비행 적은 Flying_Enemy 레이어..

사원수의 변환 (1) 사원수 - 오일러 각

- 개요사원수를 활용하여 3차원 벡터를 회전시키는 기능은 구현하였지만,사원수를 구성하는 요소들의 값은 직관적이지 않아 일반적인 회전을 구현할 때 어려움이 따른다이때 오일러 각 방식이 사원수보다 직관적이고 편리하기 때문에오일러 각의 값을 사원수로 변환해주는 기능이 있다면 매우 유용하게 사용할 수 있다 - 오일러 각에서 사원수로의 변환 위와 같이 x축을 중심으로 회전시키는 회전 사원수 q가 있다고 가정한다 회전 사원수 q를 기준으로 오일러 각을 구성하는 Roll / Pitch / Yaw 회전에 대응하는 회전 사원수 3개를 생성하였다 최종적으로 오일러 각의 회전 순서에 맞춰 Roll / Pitch / Yaw에 대응하는 회전 사원수를 곱하면오일러 각에 대응하는 사원수를 계산할 수 있다 1) 오일러 각에서 사..

적 추가 - 3) 은폐 적의 추가

- 개요 스타크래프트에서 플레이할 수 있는 3개의 종족 중에서 프로토스에게는 "아비터"라는 유닛이 존재한다해당 유닛은 아군을 투명하게 만들어 감지하지 않는 이상 공격할 수 없도록 설정한다아비터와 동일하게 아군을 투명하게 만들어 공격받지 않도록 하는 적을 추가한다 - 스크립트 작업1) Enemy_Base 클래스 EnemyType 구조체에 Stealth 멤버변수를 추가하여 은폐 적의 타입을 지정한다 위와 같이 3개의 멤버변수를 추가한다 stealthSourceCount 멤버변수 : 은폐 효과를 부여하는 적의 개수를 계산하는 카운터 cachedRenderers 멤버변수 : 적 오브젝트와 자식 오브젝트에 부착된 MeshRenderer 컴포넌트를 저장 originalMaterials 멤버변수 : 은폐 효과 적용..

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

- 개요플레이어의 공격에 피격당한 적이 쓰러지도록 프로젝트를 구성한다이때 AnimNotify가 아닌, AnimNotifyState를 사용하여 공격하는 프레임동안 피격이 이뤄질 수 있도록 수정한다 https://www.youtube.com/watch?v=IL9j4NchTvA AnimNotifyState를 사용한 피격 판정 로직은 위의 영상을 참고하여 제작하였다단, 프로젝트에서는 무기가 아닌 팔을 휘둘러 공격하므로 프로젝트에 맞춰 로직을 수정하였다 - 스크립트 작업1) SOO_AnimNotifyState_ActionEvent 클래스 프로젝트에서 사용할 AnimNotifyState 클래스를 생성한다멤버변수를 위와 같이 구성하였다ActionTag 멤버변수 : 사용중인 몽타주와 관련된 특정 행동의 태그EventN..

사원수의 회전 (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이고 평행한 벡터의 외적은 영벡터이므로위와 같이 간단하게 표현할 수 있다최종적으로 순허수 ..