일반적으로 게임에서 캐릭터를 카메라와 마주하게 만들 때 SCNLookAtConstraint를 사용할 수 있습니다. 실제로 SCNLookAtConstraint도 사용할 수 있습니다.SceneKit 게임의 SCNNode에 대해 SCNConstraint (LookAt) 애니메이션을 적용하여 천천히 전환합니다.
이하, my_object은 제약 조건에 따라 방향을 지정하려는 노드입니다. 'Enemy'는 장면의 노드를 가리키고 pointOfView는 장면의 시점을 나타냅니다. my_object를 탭하면 적을 잠시 보면서 내 pointOfView로 돌아와야합니다.
LookAtConstraint를 설정하면 '대상'이 '적'을 1 초만 보입니다.
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 (/ by :) 등이 작동하지 않음을 이해할 수 있습니다. 궁극적으로 제가 탭할 때, 객체는 점차적으로 적 노드를보고 시작해야합니다. 1-2 초가 지나면 내 포인트를 보게됩니다 .OfView, 너무 천천히.
기술적으로 카메라를 들여다보고 싶지 않으므로 SCNBillboardConstraint보다는 SCNLookAtConstraint를 사용하고 있습니다.
포인터가 도움이 될 것입니다. TIA.
네, 맞습니다. 헤즈 업에 감사드립니다. 그러나 내 질문은 내 전환을 부드럽게하는 방법입니다. 내 노드가 두 번째 노드를보고있을 때 세 번째 노드를 보도록 구속 조건을 변경하면 두 가지 변경 사항 사이에 애니메이션이 필요하므로 두 번째를 보면서 방향을 바꾸려면 내 노드에 대해 1 초라고 말하면됩니다. 노드가 제 3 노드를보고있을 때까지. – Manganese
제약 조건의 대상을 변경하면 SceneKit에서 변경 내용을 암시 적으로 애니메이션해야하지만 애니메이션 기간을 쉽게 제어하지 못할 수도 있습니다. – mnuages
아마도 당신 말이 맞아요.하지만 솔직히 말해서 너무 빨라 보이는 것 같습니다. 내가 몇 번 시험해 보게. – Manganese