다음 게시물을 이어서 작성한다.

https://gamdekong.tistory.com/203?category=954310 

 

Blend Space 2d 사용하여 에니메이션 적용하기.

우선 에니메이션을 적용시키기 위한 캐릭터를 상속받아 블루프린터를 생성한다. 그후, 스캘레톤 매쉬를 적용시키자. (에셋들은 https://www.mixamo.com/ 여기서 받을 수 있다.) 이 글에서는 swat이라는

gamdekong.tistory.com

 

공격용으로 사용할 몽타주를 생성한다.

 

생성된 몽타주를 실행시킨다.

 

그후 AnimSlotManager 탭을 활성화 시킨다.

다음과 같이  AnimSlotManager에서 AttackSlot을 만든다.

 

Slot을 AttackSlot으로 변경한다.

공격으로 사용할 에니메이션을 끌어서 넣는다.

 

이젠 에니메이션의 그래프를 수정해보자.

다음과 같이 기존에 작업한 그래프를 OutputPose를 끊고

Cache로 생성해준다.

이름은 Locomotion으로 생성했다.

 

이젠 Locomotion Cache를 이용하여 다음과 같이 수정한다.

 

다음은 공격에니메이션이 하반신까지 움직임으로 블랜드를 이용하여 상반신만 움직이게

작업한다.

 

Spine 사용하고 있는 Skeleton의 상반신 소켓의 이름이다.

 

다음은 오른쪽 마우스 버튼으로 공격하기 위한 작업을 해준다.

 

캐릭터 블루프린트를 수정한다.

 

다음과 같이 수정하여 게임을 플레이 하면,

오른쪽 버튼을 클릭시 공격에니메이션이 실행된다.

하지만 한번만 공격후 더이상 하지 않는다.

bIsAttacking을 false로 변경을 하지 않았기 때문이다.

 

다음 문제는 다음 AnimNotify에서 이어가도록한다.

 

오브젝트의 이동에는 여러방법이 있다.

Position을 직접이동,

Translate를 이용하여 포지션 변경,

Velocity 적용,

Force 적용.

 

 

물리 실험을 위한 오브젝트 2개를 생성한다.

각 오브젝트에 Rigidbody2d와 2d collider 컴퍼넌트를 추가해준다.

 

<Translate>

위와같이 Translate에 Vector값을 넣을때는 deltaTime을 이용해야한다. 각 프레임마다 같은 값을 적용하기 위해서.

(deltaTime이 뭔지 모르면 검색!)

 

해당 스크립트를 움직일 오브젝트에 추가하면, 오브젝트를 이동 시킬 수 있다.

 

여기서 다람쥐를 빨간 오브젝트에 부딪치면, 계속 튕겨져 나오는 것을 알 수 있다.

왜 이런 현상이 나오냐면,

Translate는 오브젝트를 이동할때 물리 연산을 하지 않기 때문이다.

단순히 Position을 이동 시키기 때문에, 이동후 물리연산으로 튕겨 나오는 것이다.

그래서, 물리 연산이 필요한 이동이라면 사용하지 않는것이 좋다.

Rigidbody BodyType이 Kinematic이라면 사용해도 상관없을듯 하다. 물리연산이 필요하지 않기때문에.

 

 

다음은 Rigidbody의 Velocity를 이용한다.

 

<Velocity>

우선 Rigidbody2D를 사용하기 위해 rigidbody를 가져온다.

 

Velocity는 단순히 원하는 속도를 넣어주면된다.

여기서는 속도가 10이다.

 

 

게임을 실행시켜보면 더이상 오브젝트가 튕겨 나오지 않고 붙어버리는 것을 볼 수 있다.

Velocity는 위치이동을 하기전에 먼저 물리연산을 하기때문에 위와같은 현상이 나오지 않는다.

고로, 물리연산이 필요한 이동은 Velocity나 Force를 사용하면 된다.

 

 

<AddForce>

 

AddForce 말 그대로 힘을 가하는것이다. 그렇기 때문에 연속적으로 힘을 가해주면,

끊임없이 속도가 붙는다.

예를 들어 방망이로 야구공을 한번 치면 AddForce를 한번 부른것과 같다.

 

그렇기 때문에 오브젝트의 이동을 구현하기에는 까다롭고(하지만 이동에 많이 사용함),

폭발이나, 물리적으로 큰힘을 줄 때 사용한다.

 

AddForce의 두번째 매개변수는 다음과 같다.

2D에서는 Acceleration과 VelcotiyChange는 없다.

 

우선 에니메이션을 적용시키기 위한 캐릭터를 상속받아 블루프린터를 생성한다.

그후, 스캘레톤 매쉬를 적용시키자. (에셋들은 https://www.mixamo.com/ 여기서 받을 수 있다.)

 

이 글에서는 swat이라는 에셋을 사용하였다.

 

매쉬를 화살표에 맞게 위치와 회전을 맞춰준다.

스프링 암과 카메라를 적당히 달아준다.

 

게임 모드 블루프린트를 생성하여 생성한 캐릭터가 적용되게 수정한다.

 

인풋 을 다음과 같이 추가한다.

 

 

다음은 캐릭터 이동을 블루프린터로 구현해보자.

 

이젠 캐릭터가 움직이는 것을 확인 할 수 있다.

 

다음은 마우스 움직임을 구현해 보자

 

Spring Arm 을 다음과 같이 설정한다.

 

이벤트 그래프

이젠 캐릭터의 기본적인 움직임이 끝났다.

 

 

에니메이션으로 사용할 블랜드 스페이스 2d를 생성해보자

 

블랜드를 실행시켜 다음과 같이 설정한다.

Direction은 -180 ~ 180 로 설정한다.

Speed는 0 ~ 400 으로 설정한다.

이는 최대속도를 400으로 설정할것이기 때문이다.

 

오른쪽 에셋 브라우저에서 맞는 에니메이션을 끌어와 적정 위치에 위치시킨다.

위 예제는 속도가 200 일 경우는 걷기, 200 ~ 400 은 달리기로 설정한 것이다.

 

direction이 -180 과 180 은 뒤로 이동중이고 0 일경우는 앞으로 향하는 중이다.

 

 

 

다음은 에니메이션을 적용하기 위해,

에니메이션 블루프린트를 다음과 같이 생성한다.

 

다음 에니메이션 블루프린트를 실행시켜 다음과 같이 이벤트 그래프를 작성한다.

 

OwnPawn - PawnObjectRef

SwatCharacter - SwatCharacterRef

MovementSpeed- float

Direction - Float

 

LateralSpeed - Vector

Speed - Vector

 

 

<Initiailize>

 

 

<UpdateProperties>

 

 

다음은 에님 그래프에 만든 blend 를 적용시킨다.

이젠 blend가 적용 되었다.

 

 

다음은 캐릭터의 걷기 속도를 수정한다.

 

에니메이션을 캐릭터에 적용 시킨다.

 

이젠 게임을 실행시키면 캐릭터가 방향에 맞게 걸어다니는것을 확인할 수 있다.

 

 

다음은 AimOffset 에니메이션을 적용해보자

AimOffset을 생성한다.

 

실행시켜 다음과 같이 수정한다.

 

다음은 에니메이션 블루프린트를 수정한다.

 

UpdateProperties 함수에 DeltaTime을 수정한다.

그후 UpdateProperties 함수에 다음을 추가 한다.

 

에님 그래프를 수정한다.

 

캐릭터를 다음과 같이 수정한다.

 

게임을 실행해보면 카메라에 따라 총구가 움직인다.

 

 

다음은 달리기를 적용해 보자.

 

이젠 쉬프트 키를 누르면 달리기를 시작한다.

 

 

마지막으로 앉기를 구현해 보자.

 

 

 

 

다음은 앉기 Blend Space를 만들어 보자.

 

다음은 에니메이션 블루프린트를 수정한다.

UpdateProperties 함수에 다음을 이어 추가한다.

 

에님그래프를 수정한다.

 

Crouch state는 다음과 같이 설정한다.

 

게임을 시작하고 ctrl키를 누르면 앉고 움직이는것을 확인 할 수 있다.

 

 

 

+ Recent posts