【发布时间】:2017-01-11 10:04:07
【问题描述】:
嘿,我有一个球,可以通过施加力移动。我试图让它做的基本上是重力作用于它的因果效应,同时它在空气中移动到目的地。基本上,当“移动到”动作正在播放时,重力不会产生影响,因此它不会慢慢地落到地面上,而是移动到最终位置,然后当“移动到”动作停止时它会直接落下。对场景中的重力做。
我试图让球以弧线投掷并落在目标上?
代码:
func CreateBall() {
let BallScene = SCNScene(named: "art.scnassets/Footballs.dae")
Ball = BallScene!.rootNode.childNodeWithName("Armature", recursively: true)! //the Amature/Bones
Ballbody = BallScene!.rootNode.childNodeWithName("Ball", recursively: true)!
let collisionCapsuleRadius3 = CGFloat(0.01) // Width of physicsBody
let collisionCapsuleHeight3 = CGFloat(0.01) // Height of physicsBody
Ball.position = SCNVector3Make(Guy.position.x, Guy.position.y, Guy.position.z)
Ball.scale = SCNVector3Make(5, 5, 5)
Ball.rotation = SCNVector4Make(0.0,0.0,0.0,0.0) // x,y,z,w
Ball.physicsBody = SCNPhysicsBody(type: .Dynamic, shape:SCNPhysicsShape(geometry: SCNCapsule(capRadius: collisionCapsuleRadius3, height: collisionCapsuleHeight3), options:nil))
Ball.physicsBody?.affectedByGravity = true
Ball.physicsBody?.friction = 1 //
Ball.physicsBody?.restitution = 0 //bounceness of the object. 1.0 will boounce forever
Ball.physicsBody?.angularDamping = 1 // ability to rotate
Ball.physicsBody?.mass = 1
Ball.physicsBody?.rollingFriction = 1
Ball.physicsBody!.categoryBitMask = BitmaskCollision4
Ball.physicsBody?.contactTestBitMask = BitmaskCollision3 //| BitmaskCollision2
Ballbody.physicsBody?.collisionBitMask = BitmaskCollision2 | BitmaskCollision3 | BitmaskCollision//| BitmaskCollision2
scnView.scene!.rootNode.addChildNode(Ball)
scnView.scene!.rootNode.addChildNode(Ballbody)
}
CreateBall()
现在这就是魔法发生的地方:
scnView.scene!.physicsWorld.gravity = SCNVector3(x: 0, y: -9.8, z: 0)
let location = SCNVector3(Guy2.presentationNode.position.x, 0.0, Guy2.presentationNode.position.z + Float(50) )
let moveAction = SCNAction.moveTo(location, duration: 2.0)
Ball.runAction(SCNAction.sequence([moveAction]))
let forceApplyed = SCNVector3(x: 0.0, y: 100.0 , z: 0.0)
Ball.physicsBody?.applyForce(forceApplyed, atPosition: Ball.presentationNode.position, impulse: true)
【问题讨论】:
-
您实际上应该只通过在运动学体上使用动作或在动态体上使用物理来移动节点。但不能将两者结合起来。您是否想让您的球以弧线投掷并落在目标上?
-
是的,这正是我想要做的 :) @JamesP 看到我可以对物体施加一个力并将它向左、右、后、前、上、下发射。但是它只会朝那个方向发射它不会去一个特定的点目标
-
我前几天做了这个,我现在没有代码(我可以在我发布的时候发布),但是我从这个链接修改了
BallisticVel函数: answers.unity3d.com/questions/248788/… -
好的,我会看看谢谢@JamesP
-
翻译成 swift 有点困难,但大多数我只是不知道它到底是做什么的。希望你在发布 ti 时编码会解释一切@JamesP