GameplayKitの「Agents, Goals, and Behaviors」という機能を試してみました。
GameplayKit Programming Guide: Agents, Goals, and Behaviors
これは特定のオブジェクトに向かって移動したり、特定のオブジェクトから逃げるようなものを作れる機能です。
早速実装をしてみます。
まずはXcodeでゲームプロジェクトを作成します。
GameScene.swiftを以下のように置き換えます。
こちらはagent2がagent1に向かって移動するサンプルです。
import SpriteKit import GameplayKit class GameScene: SKScene { var agentSystem = GKComponentSystem(componentClass: GKAgent2D.self) var agent1 = GKAgent2D() var agent2 = GKAgent2D() var prevTime: TimeInterval = 0 override func didMove(to view: SKView) { agent1.position = vector_float2(x: 100, y: 100) agent2.position = vector_float2(x: 300, y: 500) agent2.delegate = self agent2.behavior = GKBehavior(goal: GKGoal(toSeekAgent: agent1), weight: 100) agentSystem.addComponent(agent2) } override func update(_ currentTime: TimeInterval) { let deltaTime = prevTime == 0 ? 0 : currentTime - prevTime prevTime = currentTime agentSystem.update(deltaTime: deltaTime) } } extension GameScene: GKAgentDelegate { func agentDidUpdate(_ agent: GKAgent) { print((agent as? GKAgent2D)?.position) } }
実際に起動すると以下のようなログが表示されます。
agent2を表示しているのですが、agent1(x: 100, y: 100)に向かって移動している事が分かるります。
agent1(x: 100, y: 100)の座標に移動したあとは、バネのような動きをします。