簡體   English   中英

SceneKit碰撞偶爾會失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM