在SceneKit游戏中为SCNNode动画SCNConstraint(LookAt)以使转换渐变

问题描述 投票:0回答:1

一般来说,当一个人想要让游戏中的角色面对镜头时,可以使用SCNLookAtConstraint,这实际上也很适合我。

下面,my_object是我尝试根据约束定向的节点。 'Enemy'指的是场景中的某个节点,pointOfView是场景的View。当我点击my_object它应该看一下敌人一小段时间,然后回到我的pointOfView。

设置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秒后,它应该回来看看我的pointOfView,这也是逐渐的。

请注意,我不希望角色在技术上看到相机,因此我使用的是SCNLookAtConstraint,而不是SCNBillboardConstraint。

TIA,指针会有所帮助。

ios swift scenekit scnnode
1个回答
3
投票

target属性是读写的,因此您应该能够重用SCNLookAtConstraint实例(而不是创建一个新实例)并且只需交换目标。

编辑

约束的influenceFactor允许节点的当前变换与约束计算的变换之间的平滑动画。

© www.soinside.com 2019 - 2024. All rights reserved.