2015-04-25 29 views
3

我似乎無法弄清楚如何使用SCNTransformConstraint約束節點的Z值。這是迄今爲止我所擁有的。如何使用SCNTransformConstraint來限制節點的Z值?

 let constraint = SCNTransformConstraint(inWorldSpace: true, withBlock:{ 
      node, matrix in 

      var newMatrix = matrix 
      let currentNode = node as SCNNode 
      if (currentNode.presentationNode().position.z > 0.0) { 
       newMatrix.m43 = 0.0 
      } 

      return newMatrix 
     }) 

    ship.constraints = [constraint] 

上述約束,ship當我施加力,其physicsBody不動。任何幫助將不勝感激。

+0

這幫了我。雖然,我第一次嘗試安東尼泰勒的建議。這讓我在屏幕上出現了某種抖動。使用你以上的最小z高度約束爲我工作。謝謝... – xBACP

回答

2

是的。這個也讓我難住了一下。

問題出在矩陣上。根據有關SCNMatrix4(矩陣)參數的Developer documentation

如果節點通過正在進行中的動畫的影響,該值反映了節點的當前可見狀態下的動畫過程中(而不是它的目標狀態將在動畫完成時可見)。

取而代之的是:

var newMatrix = matrix 

你真的想:

var newMatrix = node.transform 

這似乎是當前變換將被應用到該節點。

我知道這是一個老問題,但這已經接近SCNTransformConstraint的搜索結果的頂部。嘿,遲到比永遠晚,對吧?

相關問題