UE4 C++(11):移動元件和碰撞
10/15/2020
移動元件
UPawnMovementComponent 這個元件控制Actor的移動,比如奔跑,跳躍和蹲伏等等,通常Pawn/Character呼叫AddMovementInput函式,是轉移給移動元件完成。
圖解
- Add/ConsumInputVector函式可以把當前移動數值儲存或者消耗掉
//constructor....
// 建立移動元件的例項,並要求其更新根元件。
OurMovementComponent = CreateDefaultSubobject<UCollidingPawnMovementComponent>(TEXT("CustomMovementComponent"));
OurMovementComponent->UpdatedComponent = RootComponent;
void ACollidingPawn::MoveForward(float AxisValue)
{
if (OurMovementComponent && (OurMovementComponent->UpdatedComponent == RootComponent))
{
OurMovementComponent->AddInputVector(GetActorForwardVector() * AxisValue);
}
}
void ACollidingPawn::MoveRight(float AxisValue)
{
if (OurMovementComponent && (OurMovementComponent->UpdatedComponent == RootComponent))
{
OurMovementComponent->AddInputVector(GetActorRightVector() * AxisValue);
}
}
//--------------------------------------------------------------
void UCollidingPawnMovementComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
// 確保所有事物持續有效,以便進行移動。
if (!PawnOwner || !UpdatedComponent || ShouldSkipUpdate(DeltaTime))
{
return;
}
// 獲取(然後清除)ACollidingPawn::Tick中設定的移動向量
FVector DesiredMovementThisFrame = ConsumeInputVector().GetClampedToMaxSize(1.0f) * DeltaTime * 150.0f;
if (!DesiredMovementThisFrame.IsNearlyZero())
{
FHitResult Hit;
SafeMoveUpdatedComponent(DesiredMovementThisFrame, UpdatedComponent->GetComponentRotation(), true, Hit);
// 若發生碰撞,嘗試滑過去
if (Hit.IsValidBlockingHit())
{
SlideAlongSurface(DesiredMovementThisFrame, 1.f - Hit.Time, Hit.Normal, Hit);
}
}
- 建立移動元件類
- Pawn生成移動元件
- 與移動元件建立聯絡
參考
相關文章
- UE4的移動碰撞
- 《Exploring in UE4》移動元件詳解[原理分析]元件
- UE4 C++ 攀爬功能C++
- 《Exploring in UE4》遊戲角色的移動原理(上)遊戲
- 《Exploring in UE4》遊戲角色的移動原理(下)遊戲
- 如何在 UE4 移動端中實現 HZB?
- 主流移動端元件庫的對比和分析元件
- UE4 c++ -- 簡單的UMGC++
- UE4 C++ Widget的NativeConstruct 與 NativePreConstructC++Struct
- UE4中C++程式設計(一)C++程式設計
- C++ 移動構造和複製建構函式匹配C++函式
- 2020/11/17·Leetcode·移動零LeetCode
- 關於移動端元件庫元件
- 遊戲地圖背景移動C++遊戲地圖C++
- TreeViewTemplate移動元件詳細介紹View元件
- 移動端左滑右滑元件元件
- C++移動語義 詳細講解【Cherno C++教程】C++
- Ericsson:2019年11月移動報告CSS
- Ericsson:2024年11月移動報告CSS
- 移動端Modal元件開發雜談元件
- RN自定義元件封裝 - 神奇移動元件封裝
- 移動端『H5周曆元件』H5元件
- vue移動端側滑皮膚元件Vue元件
- js小球重力和碰撞效果JS
- svelte元件:Svelte自定義彈窗Popup元件|svelte移動端彈框元件元件
- 拷貝和移動
- UE4純C++實現遊戲中快捷欄C++遊戲
- iSlider移動端原生滑動元件原始碼解讀IDE元件原始碼
- 密碼學系列之:碰撞抵禦和碰撞攻擊collision attack密碼學
- C++11之右值引用、移動語義C++
- C++ Qt開發:TableView與TreeView元件聯動C++QTView元件
- 移動端APP元件化架構實踐APP元件化架構
- [c++11]我理解的右值引用、移動語義和完美轉發C++
- App Annie:2020年11月全球熱門移動應用和遊戲排名APP遊戲
- 2022 年 11 種最佳移動自動化測試工具
- ue4繫結動畫、重定向動畫動畫
- c++ 11 執行緒池---完全使用c++ 11新特性C++執行緒
- 愛立信:2022年11月移動報告