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生成移動元件
- 與移動元件建立聯絡
參考
相關文章
- 《Exploring in UE4》移動元件詳解[原理分析]元件
- UE4 C++ 攀爬功能C++
- 《Exploring in UE4》遊戲角色的移動原理(上)遊戲
- 《Exploring in UE4》遊戲角色的移動原理(下)遊戲
- 如何在 UE4 移動端中實現 HZB?
- UE4 c++ -- 簡單的UMGC++
- 主流移動端元件庫的對比和分析元件
- 動態移動控制元件 (轉)控制元件
- UE4中C++程式設計(一)C++程式設計
- 關於移動端元件庫元件
- 遊戲地圖背景移動C++遊戲地圖C++
- C++ 移動構造和複製建構函式匹配C++函式
- UE4純C++實現遊戲中快捷欄C++遊戲
- TreeViewTemplate移動元件詳細介紹View元件
- 移動端左滑右滑元件元件
- js小球重力和碰撞效果JS
- 在執行時使用滑鼠移動控制元件和改變控制元件的大小 (轉)控制元件
- C++移動語義 詳細講解【Cherno C++教程】C++
- 移動端Modal元件開發雜談元件
- RN自定義元件封裝 - 神奇移動元件封裝
- vue移動端側滑皮膚元件Vue元件
- 移動端『H5周曆元件』H5元件
- 移動端圖片上傳元件分享元件
- 密碼學系列之:碰撞抵禦和碰撞攻擊collision attack密碼學
- svelte元件:Svelte自定義彈窗Popup元件|svelte移動端彈框元件元件
- 按enter時,控制元件焦點自動移動控制元件
- 移動端APP元件化架構實踐APP元件化架構
- C++ Qt開發:TableView與TreeView元件聯動C++QTView元件
- UE4 ProjectileMovement Component 延遲啟動Project
- iSlider移動端原生滑動元件原始碼解讀IDE元件原始碼
- [VB.net][WinForm]Panel控制元件移動\滑鼠拖動ORM控制元件
- Aery的UE4 C++遊戲開發之旅(5)字元&字串C++遊戲開發字元字串
- UE4純C++實現遊戲快捷欄之物品讀取C++遊戲
- UE4 C++ Widget的NativeConstruct 與 NativePreConstructC++Struct
- 11個移動應用開發的HTML5框架和應用HTML框架
- 實現基於React的移動端Swiper元件React元件
- 移動端日曆元件設計與實現元件
- Blazor Bootstrap 元件庫地理定位/移動距離追蹤元件介紹Blazorboot元件