(版權聲明,禁止轉載)
運行起來Cube自然落到地板上
整個過程表面上很簡潔直觀
但是要透徹的理解這個過程,還是對UE4框架的掌握有要求的
<1> Actor的位置position和旋轉rotation在哪裏存儲
<2> Actor的位置position和旋轉rotation在哪裏更新
---實際是更新 USceneComponent的ComponentToWorld成員
<4> 創建PhysicsState的條件
---UStaticMeshComponent默認會調用OnCreatePhysicsState創建Mesh對應的PxRigidActor
---如果不想創建對應的PxRigidActor需要設置Collision->碰撞預設置->NoCollision
<5> 如何單步跟蹤這個下落的過程
---單步跟蹤困難主要是由於UE4採用了Task隊列+多線程的架構,
把執行流程打散成多個Task分佈到多個線程裏並行
設置的EnableGravity/NoCollision會對應下面的PxActorFlag,設置進PxRigidActor
默認不勾選Simulate Physics, PhysX還是會EnableSimulation,只是不會EnableGravity
struct PxActorFlag
{
enum Enum
{
/**
\brief Disables scene gravity for this actor
*/
eDISABLE_GRAVITY = (1<<1),
/**
\brief Disables simulation for the actor.
*/
eDISABLE_SIMULATION = (1<<3)
};
};
理解清楚這個流程,對於編寫UE4相關Plugin是必須的
但是還是會有一些比較麻煩的問題存在(讀者可以嘗試自行解決)
默認Cube下落的重力加速度是自然界的值,如何修改這個值來改變下落快慢
Cube落到地面什麼情況下才會彈起,這個反彈模型又是怎樣的,如何通過相應參數調節
如果Cube在Floor上水平滑動,如何調節摩擦力大小來改變滑動長度