본문 바로가기

DXWave/언리얼

Gravity

https://www.youtube.com/watch?v=B1GeijuTlkI&t=304s

 

WorldSettings의 Override WorldGravity를 켜고 값을 + 로 주면 피직스의 영향을 받는 메시들은 떠 오르기 시작한다.

Global Gravity Z값이 영향을 받아서 라는데 점프해보면 ThirdPerson도 잘 떠 오른다.

값을 3으로 조정하면 적당하지만 앞뒤로 움직일수가 없다.

BP_ThirdPersonCharacter를 열고 CanFly를 체크하고 MaxFlySpeed를 10000정도 높이면 움직이는걸 알수 있다.

월드세팅의 오버라이드 월드 그래비티를 끄면 Character에서 중력의 제어를 할것이다.

BP_ThirdPersonCharacter의 Movement Component의 GravityScale을 0으로 하자. 

그럼 높은곳에서 앞으로 갔을때 중력의 영향을 안 받는다. 

월드 그래비티 Z를 3으로 켜고 캐릭터 GravityScale을 -50으로 하면 천천히 떨어진다.

월드 그래비티를 끄고, 캐릭터 그래비티를 초기값으로 하자. 

Gravity라는 마크로를 만들자. CharacterGravity(0.15), DefaultGravity(0) 변수도 만들고, IsAutoGravity(False)

공중에 뜬 캐릭터를 자동랜딩 하게 하려면 IsAutoGravity가 True이고 그때는 CharacterGravity(0.15)를   CalcGravity에 설정하고 아닐때는 DefaultGravity(0)을 설정한후 다시 MovementComponent의 GravityScale에 설정해서 안떨어지게 한다.

BP_ThirdPersonCharacter의 EventBeginPlay에 WorldSeting을 저장하고 Gravity를 연결한다. GravityScale을 처리한다.

isAutoGravity의 가부에 따라 랜딩하기도 하고 떠 있기도 한다.

OverrideWorldGravity를 켜면 캐릭터는 떨어지지 않는다. BP_Character의 GravityScale이 무시되서 그런것 같다.

OverrideWorldGravity에 따라 CalcGravity변수값을 달리 설정하지.

OverrideWorldGravity가 켜져 있으면 0.15*100*-1=-15가 되고  안켜져 있으면 0.15가 된다.

방금만든 GravityCalc 마크로를 GravityMacro안에 다음과 같이 SetGravity대신 바꿔준다.

방금만든 GravityCalc 마크로를 GravityMacro안에 다음과 같이 SetGravity와 

IsAutoGravity?를 끄면 랜딩하지 않는데 1을 누르면 랜딩되게 만들어보자

 

IsAutoGravity가 체크되었을때도 Gravity Macro를 활성화하게 Or불리언으로 처리한다.

1이 눌리면 StartGravity를 체크해서 떨어지게 만든다.

WorldSetting의 OverrideWorldGravity에 관계없이 떠 있다가 1을 누르면 랜딩한다. 하지만 다시 시도하면 1을 안 눌러도 랜딩한다 왜? 1을 눌러 StartGravity를 켰는데 끄지 않아서 그렇다.

그럼 언제 꺼야할까  랜딩후 StartGravity를 꺼주는 GravityReset 마크로를 만들어 랜딩시 StartGravity?를 끄고 Gravity매크로를 처리하면 CalcGravity가 Default0이 되고 GravityScale이 0이어 랜딩이 멈춘다.

 

1을 누르고 Gravity매크로를 실행시켜 GravityScale을 변화시켜 랜딩시킨후 GravityReset에서 랜딩시 StartGravity를 리셋시켜준다.

WorldSetting의 OverrideWorldGravity에 관계없이 떠 있다가 1을 눌러야 랜딩한다. 랜딩이 시작되면  GravityReset에서 랜딩을 감시하다가 랜딩하면 GravityScale을 0으로 만들어 랜딩을 멈춘다.

EventBegin끝에 있는 Gravity매크로 대신 GravityReset으로 바꾼다.

JumpVelocity float변수를 만들고

AutoGravity시 JumpSpeed를 보상하기 위해

GravityReset매크로에 JumpVelocity

 

GravityReset매크로에

AutoGravity시 2로 나누어 감속시킨다. 

 

최종적으로 날수 있는지 체크하 isSpace Boolean변수를 만들어 

 

BeginPlay부분과

1 부분에 넣어서 체크한다

'DXWave > 언리얼' 카테고리의 다른 글

Cesium for Unreal [Ureal]  (0) 2024.12.13
Motion Matching  (0) 2024.12.12
Instant Mesh 메시최적화 토폴로지 블렌더  (0) 2024.11.24
BPI 인터페이스  (0) 2024.11.17
메타버스 VP VFX CGI  (1) 2024.11.05