一般来说,当你想让游戏中的角色面对镜头时,可以使用 SCNLookAtConstraint,这实际上也对我很有帮助。
Below, 我的对象是我试图根据约束定向的节点。 “Enemy”指的是场景中的某个节点,pointOfView 是场景的视角。当我点击 my_object 时,它应该会注视敌人一秒钟,然后回到我的视角。
设置 LookAtConstraint 以便“对象”观察“敌人”一秒钟。
my_object.constraints?.removeAll()
let targetNode = sceneView.scene.rootNode.childNode(withName: (chosenScenarioForChallenge?.shape)!, recursively: true)
let lookAt = SCNLookAtConstraint(target: targetNode)
lookAt.isGimbalLockEnabled = true
my_object.constraints = [lookAt]
Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(resetObject), userInfo: nil, repeats: false)
在查看“敌人”节点后重置对象以查看我的观点
@objc
func resetObject() {
my_object.constraints?.removeAll()
let targetNode = sceneView.pointOfView
let lookAt = SCNLookAtConstraint(target: targetNode)
lookAt.isGimbalLockEnabled = true
my_object.constraints = [lookAt]
}
我的问题是,我不希望约束条件发生突然的变化。我希望它能够平滑,因此我想将动画融入其中。查看 SCNAction 和 SCNAnimation 后,我未能找到与约束相关的任何内容。由于约束动态更新位置,我可以理解 SCNAction.move(to/ by: ) 等不起作用。最终,当我点击时,我的对象应该开始逐渐查看敌人节点,1-2 秒后,它应该回来查看我的视点,这也是逐渐的。
请注意,我不希望角色从技术上看镜头,因此我使用 SCNLookAtConstraint,而不是 SCNBillboardConstraint。
指针会有所帮助,TIA。