无限旋转SCNNode 360度

6
我正在寻找一种方法来使一个笔记绕其z轴旋转360度。持有相机的节点沿着z轴负方向移动,不允许更改其y和z。 我已经尝试过CABasicAnimation,但没有成功。 有人能指点我一个解决方案吗?

这个 cameraNode.rotation = SCNVector4Make(0, 0, 1.f, cameraNode.presentationNode.rotation.w + DEGREES_TO_RADIANS(.5f)); 给我一种奇怪的效果,就像在90度后突然回到0... - tomalbrc
1
你能展示一下你尝试过的吗?另外,请澄清一下你所说的“不允许改变它的y和z”的意思。 - David Rönnqvist
就像沿着一个隧道向负z方向掉落,x和y应该保持为0,我只是想提一下这个。 - tomalbrc
3个回答

7

可以考虑将其旋转不到360度?由于您的标题中提到了“无限”,所以应该没问题,而且重复动画一遍又一遍最终会超过360度。

否则,您可以查看苹果的默认SceneKit项目,它对我非常有用:

[cameraNode runAction:[SCNAction repeatActionForever:[SCNAction rotateByX:0 y:.5 z:0 duration:1]]];

或者,对于OSX:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"rotation"];
animation.toValue = [NSValue valueWithSCNVector4:SCNVector4Make(0, 0, 1, M_PI*2)];
animation.duration = 15;
animation.repeatCount = MAXFLOAT; //repeat forever
[YOURNODE addAnimation:animation forKey:nil];

如果我将此应用于我的cameraNode上,它没有任何效果。在cameraNode.camera上尝试这个会给我这个错误信息:[SCNKit ERROR] rotation is not an animatable path (from <SCNCamera: 0x14ed5470>) - tomalbrc
嗯,好像在iOS上CA不起作用。这并不是我最擅长的平台,所以抱歉误导了你。我已经更新了代码,加入了一些对我有效的内容! - Moustach
我最终使用了欧拉角,非常满意 :) 但还是非常感谢您的帮助,祝您圣诞快乐! - tomalbrc
很高兴你解决了问题!也祝你圣诞快乐! - Moustach

7
永久沿z轴旋转对象。
let node = SCNNode()
self.sceneView.scene.rootNode.addChildNode(node)
//creating an box object
node.geometry = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)
node.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
node.position = SCNVector3(0,0,0)
//adding a rotation by Z axis        
let action = SCNAction.rotateBy(x: 0, y: 0, z: CGFloat(GLKMathDegreesToRadians(360)), duration: 8)
let forever = SCNAction.repeatForever(action)
node.runAction(forever)

1
[[ZnodeOnly physicsBody] setVelocityFactor:SCNVector3Make(0, 0, 1)];

[[ZnodeOnly physicsBody] setAngularVelocityFactor:SCNVector3Make(0, 0, 1)];

[RotatingNode runAction:[SCNAction repeatActionForever:[SCNAction rotateByAngle:-360/(180/M_PI) aroundAxis:SCNVector3Make(0, 0, 1) duration:1]]];

[node setRotation:(x,y,z, w)] 是一种立即进行的变换。使用 SCNAction 可以使旋转动画化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接