検出されたプレーンはARSession
に追加されたアンカーなので、新しく追加されたアンカーへの応答にデリゲートメソッドを使用します。 Apple's "Providing 2D Virtual Content with SpriteKit" docで
、彼らは新しいアンカーに応じてSpriteKitベースノードを作成するためのいくつかの基本的なコードを示しています。
func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {
return SKLabelNode(text: "")
}
あなたは、すべての検出された平面の中心にビルボード絵文字を入れたい場合は、それはすべてのコードあなたです必要。そうでなければ、あなたは以下の一つ以上を行うことができます...
は異なるSpriteKitベースノードを提供する - その方法でそれを初期化し、そこにそれを返します。
また、シーンに手動でアンカーを追加することもできます。この場合、平面検出ベースのアンカーをソートする必要があるかもしれません(この場合、SpriteKitドキュメント、チュートリアル、その他の質問はSpriteKitの使用方法を参照してください)。残り。
func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {
if let plane = anchor as? ARPlaneAnchor {
// this anchor came from plane detection
return SKLabelNode(text: "✈️") // or whatever other SK content
} else {
// this anchor came from manually calling addAnchor on the ARSession
return SKLabelNode(text: "⚓️") // or whatever other SK content
}
}
はSKコンテンツが提供する何かそれを設定する方法を選択するためにARPlaneAnchor
のプロパティの一部を使用してください:あなたがそのメソッドの型をテストできるように平面アンカーは、ARPlaneAnchor
インスタンスです。その場合は、上記のような条件付きキャスト(as? ARPlaneAnchor
)を使用して、これらのプロパティにアクセスできます。
ARKitが提供/管理するSKコンテンツの位置/方向を変更するか、各アンカーに複数のSKノードを追加します。その場合は、代わりにview(_:didAdd:for:)
を実装し、SKコンテンツの新しいノードを作成し、位置(など)を設定してから、そのメソッドが提供するnode
の子として追加してください。
私は基本的な例を 'view nodeFor'で実行しようとしましたが、トリガされていないようです - 私は床を見ながらカメラをパンしようとしましたが、 'configuration.planeDetection = .horizontal' – MonkeyBonkey
これ以上調べてみると、設定行' configuration.worldAlignment = .gravityAndHeading'のように見えるので、面検出アンカーが数分間起動されません。それはなぜでしょうか? – MonkeyBonkey
ゆっくりとした世界のアライメントについての質問を別の質問に分け、これを受け入れます。 – MonkeyBonkey