일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Stored Procedure
- Trie
- MYSQL
- binary search
- Dijkstra
- 그래프
- DP
- 이진탐색
- Brute Force
- two pointer
- SQL
- String
- 다익스트라
- union find
- Two Points
- 스토어드 프로시저
- Hash
- Today
- Total
목록Unreal 4 (16)
codingfarm
언리얼 기본 예제 프로젝트인 flight에 대해 알아보자 a,d 로 좌/우회전 w,s 로 하강/상승 L.shift, L.ctrl로 가속/감속을 하여 비행기를 조종한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 // Copyright 1998-2019 Epic Games, Inc. All Rights R..
우클릭을 통해 발차기 기능을 추가해보자 발차기는 주먹과 다른 애니메이션 몽타주로 재생되며 주먹과는 달리 공격중 이동이 불가능하다. 우선 애니메이션 몽타주를 만들고 섹션을 형성해준다. 메쉬 스켈레톤에는 주먹 뿐만아니라 발끝에도 소켓을 추가한다. 이제 입력 메커니즘을 수정하자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 void APunchKick06Character::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) { // Set up game play key bindings check(PlayerInputComponent); P..
캐릭터가 주먹을 휘두르고 타격하는 소리가 나도록 해보자 1 2 3 4 5 6 7 8 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Audio, meta = (AllowPrivateAccess = "true")) class USoundCue* PunchSoundCue; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Audio, meta = (AllowPrivateAccess = "true")) class USoundCue* PunchThrowSoundCue; UAudioComponent* PunchThrowAudioComponent; UAudioComponent* PunchAudioCompon..
각 액터가 서로 충돌이 발생했을때에 이벤트가 발생하는 방법에 대해 알아보겠다. 앞서 우리는 클릭과 함께 주먹을 휘두르고 박스가 이에 반응하도록 프로젝트를 구성했으며 여기서부터 이어나가겠다. 먼저 주먹이 충돌했을때 호출될 아래와같은 이벤트 함수의 원형을 헤더파일에 넣는다. 1 2 UFUNCTION() void OnAttackHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); cs 이벤트가 될 함수는 반드시 UFUNCTION() 데코를 설정해주어야한다. 함수 정의는 아래와 같으며 지금은 충돌 감지가 잘 되는지 확인하..
주먹으로 적을 타격하는 게임을 만든다 할때 제일 이상적인 방법은 캐릭터의 주먹에 충격을 감지할 collider를 만들고 애니메이션 재생시에 collider에 들어온 적에게 피격 이벤트를 발생시키는것이다. 이때 모델의 주먹에 collider 를 추가하기 위해서 스켈레톤 소켓을 사용할 수 있다. Hand_L과 Hand_R 하위에 소켓을 추가해주고, 적당한 위치를 정한다. 그리고 소켓의 위치에 Box Collider Component를 추가해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 class APunchKick02Character : public ACharacte..
https://docs.unrealengine.com/ko/Engine/Animation/AnimMontage/Overview/index.html 애니메이션 몽타주 개요 애니메이션 몽타주 애셋 작업 방식과 어디에 사용할 수 있는지에 대한 설명입니다. docs.unrealengine.com 여러 애니메이션 시퀀스를 하나의 애니메이션 에셋에 합칠수 있으며 이를 여러 섹션으로 나누어 원하는 구간에 대해서만 그리고 조합하여 재생이 가능하게끔 한다. 가령 하반신은 걷거나 뛰고 있는데 상반신은 총기 조준을 하거나, 재장전, 방패막기 등 상반신과 하반신에 별개의 애니메이션을 주는것이 가능해진다. 상반신과 하반신 애니메이션 따로 재생하기 하반신은 이동에 맞추어 걷지만 상반신은 공격하는 애니메이션을 짜보자 1 2 3 4..
애니메이션 에셋이 주어젔을때 skeleton이 다르면 자신의 모델에 적용이 불가능하다. 하지만 애님 에셋 리타게팅으로 해결 가능하다. 호환 스켈레톤만 표시를 해제해주고 오른쪽에서 원하는 스켈레톤을 선택한다.
actor의 GetVelocity() 함수를 이용하면 이동중인 방향을 알 수 있으나 world 좌표계 기준이다. 그러므로 이 좌표를 local 좌표를 기준으로 얻을 수 있어야 한다. 원리는 간단하다. 우선 GetActorRotation().Vector()로 액터가 바라보는 방향을 구한다. FMath::Atan2(vector.Y, vector.X) 함수를 이용해서 방향벡터를 각도로 변환한다. 그리고 아래식을 참고하여 벡터 회전 변환을 실시한다 $$x'=x\cos\theta-y\sin\theta\\ y'=x\sin\theta+y\cos\theta$$ 언리얼에서는 정면이 X축, 오른쪽이 Y축임을 주의하고 코드를 작성하면 된다. 아래 코드는 캐릭터가 이동중인 방향벡터를 월드좌표계에서 로컬좌표계로 변환하는 코드이..
https://docs.unrealengine.com/en-US/API/Runtime/Engine/Engine/UEngine/AddOnScreenDebugMessage/1/index.html https://developstudy.tistory.com/40?category=783182 1 GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("%f, %f"), 15.0, 5.0)); cs
https://docs.unrealengine.com/ko/Gameplay/HowTo/UsingCameras/SpringArmComponents/index.html 스프링 암 컴포넌트 사용법 Spring Arm 컴포넌트는 카메라 시야가 막히는 상황을 자동으로 처리하는 데 사용됩니다. docs.unrealengine.com 주로 카메라 컴포넌트의 부모로 설정하여 게임상에서 카메라의 위치를 편리하게 설정할 수 있게끔 한다. 주로 3인칭 게임을 만들때에 장애물에 따라 카메라의 위치를 늘였다 줄였다 하는데에 편리하게 쓰인다. Target Arm Length spring의 상위에 붙은 타겟과 하위에 붙은 카메라 사이의 거리를 설정한다 Socket Offset 스프링 암 끝의 카메라의 위치를 조정한다. 이 상대 오..
https://www.youtube.com/watch?v=LsNW4FPHuZE 위 강좌에 나오는 내용을 정리한 포스팅이다. 시간이 지날수록 하단의 게이지가 차오르며 가득차면 캐릭터가 사망하면서 게임오버 된다 이를 늦취 위해 맵에 랜덤으로 리젠되는 오브젝트를 획득하는 게임이다. 캐릭터이동에 관한 기본 베이스는 언리얼에서 예제 프로젝트로 제공되는 3인칭 게임에 두고있다.
천장 부분을 렌더링 하기 위한 함수이다. 방의 크기에 맞춰서 천장 파츠를 이어 붙여야 하므로 RoomSize 횟수 만큼 반복문을 돌려줘야한다. 몇번째 방인지(index), 방의 크기가 어느정도인지(RoomSize), 방의 시작위치가 어디인지(offset)의 정보들을 이용해서 각각의 천장 파츠가 와야할 위치를 MakeTransform으로 만든다. 그리고 Static mesh Component를 이용하여 해당위치에 천장 mesh를 만든다. RoomType에 설정된 값에 따라 천장의 타입이 결정되게끔 한다. 그리고 앞서 만들어진 transform에 추가된 static mesh component에 알맞은 mesh를 적용시킨다. roomtype이 너무 작다면 나머지 천장의 타입은 자동으로 결정 되게끔 한다. Sw..
RoomNames 문자열 타입의 배열에 문자열을 입력하면 그에 맞춰 각 방에 이름을 표시한다 가령 위와 같이 문자열을 설정하면 first room 이라는 이름이 각 방의 벽면에 렌더링 됨을 확인 할 수 있다. 이를 구현하는 블루프린트를 확인하자. 함수 시작점부터 살펴보겠다. 스크립트의 흐름에 따라 바로 다음 순서를 보자 "Text location at the begnning of each room" 각 방의 시작점에 텍스트를 위치시킨다. 텍스트가 형성될 좌표를 찾는 과정이다. X : 매개변수 offset으로 전달받은 위치 Y,Z : 직접 입력 이렇게 얻은 좌표를 기반으로 transform을 형성하고 이를 기반으로 Text Render Component를 추가한다. 이때 상대좌표를 사용함을 명심하라 방의 ..
RoomNames 문자열 타입의 배열에 문자열을 입력하면 그에 맞춰 각 방에 이름을 표시한다 가령 위와 같이 문자열을 설정하면 first room 이라는 이름이 각 방의 벽면에 렌더링 됨을 확인 할 수 있다. 이를 구현하는 블루프린트를 확인하자. 함수 시작점부터 살펴보겠다. 스크립트의 흐름에 따라 바로 다음 순서를 보자 "Text location at the begnning of each room" 각 방의 시작점에 텍스트를 위치시킨다. 텍스트가 형성될 좌표를 찾는 과정이다. X : 매개변수 offset으로 전달받은 위치 Y,Z : 직접 입력 이렇게 얻은 좌표를 기반으로 transform을 형성하고 이를 기반으로 Text Render Component를 추가한다. 이때 상대좌표를 사용함을 명심하라 방의 ..
해당 프로젝트에서 여러 컨텐츠를 보이기 위한 공간이다. 블루프린트로 기능이 작성되어있으며 아래에서 주요 기능을 확인하자. Construction Script 0과 1이라는 분기점이 2개가 형성된다 먼저 0 분기점으로 가보자 "ThisRoomSize" 라는 정수형 변수를 0으로 만든다. "OffsetList" 라는 실수형 배열을 clear 한다. "RoomSizes"라는 정수형 배열을 clear 한다. 사실상 변수들을 초기화 시키는 작업을 수행한다 볼 수 있다. 이제 분기점 1로 가보자. 상당히 큰 규모지만 차근차근 살펴본다 우선 NumberofRooms 정수형 변수의 값을 최소1, 최대30의 값으로 한정짓는다. 이 NumberofRooms는 방이 연달아 몇개까지 있는지를 결정짓는 요소이다. 즉, 연달아 ..