[英]SceneKit collision occasionally fails
我正在嘗試模擬足球比賽。 我有一個模擬球場的SCNPlane
。 我已經導入了足球目標3D模型( .dae
文件)和球模型( .dae
)。
我的球有一個動態的物理體,飛機靜止,目標是運動學。 我為每個contactTestBitMask
設置了categoryBitMask
和contactTestBitMask。
當我將球射向球門時,有時球會反彈並且表現得如預期的那樣,但有時候球會穿過球門並穿過它。
我還指定了SCNPhysicsContactDelegate
並且當球didBeginContact
反彈時觸發了didBeginContact
但是當球越過它時,則不調用該方法。
你知道會發生什么嗎?
謝謝!
可能是球移動太快而物理引擎無法正確計算的問題。 嘗試更改“timeStep”值:
SceneKit處理物理模擬,並按照此屬性指定的時間間隔更新所有物理實體的狀態。 默認值為1/60秒(速率為60 Hz)。 更快的仿真速率可以提高仿真結果的准確性 - 例如快速移動的對象之間的碰撞 - 但CPU時間成本較高(這可能會降低應用程序的渲染幀速率)。 通常,應將此屬性設置為與目標渲染幀速率匹配(由呈現場景的SCNView對象的preferredFramesPerSecond屬性定義)。 https://developer.apple.com/documentation/scenekit/scnphysicsworld/1512881-timestep
實例屬性categoryBitMask
定義物理主體所屬的類別, contactTestBitMask
定義哪些類別的主體導致與此物理主體的交集通知。
您需要一個collisionBitMask
實例屬性,該屬性定義哪些類別的物理實體可以與此物理實體發生沖突 。
var collisionBitMask: Int { get set }
當兩個物理實體相互接觸時,可能會發生碰撞。 SceneKit通過執行按位AND運算將主體的碰撞蒙版與其他主體的類別蒙版進行比較。 如果結果是非零值,則主體受到碰撞的影響。 每個身體獨立地選擇是否想要受到另一個身體的影響。 例如,您可以選擇避免碰撞計算,這會對身體的速度產生微不足道的變化。 默認值為
all
(啟用了每個位的位掩碼),指定正文將與所有其他類別的主體發生沖突。
static var all: SCNPhysicsCollisionCategory { get }
all
是物理實體的collisionBitMask
屬性的默認Type Property
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.