2017-08-02 3 views
1

私はARAnchorごとに異なる画像を表示するARKit Spritekitプロジェクトを持っています。SKViewデリゲートメソッドビュー(nodeFor)にカスタムパラメータを渡す方法

私はSKSpriteNodeイメージにマッチする最良の方法について少し混乱しています。SKSceneシーンクラスとビューコントローラの間にコントロールの反転があるため、各ARAnchorに追加しています。

私はScene.swiftでアンカーを追加していますが、ビューコントローラではデリゲートメソッドを処理します。

func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? { 
    // Create and configure a node for the anchor added to the view's session. 
    // this image url needs to be dynamic and vary for each node 
    let imageURL = "https://farm1.staticflickr.com/[SOMEID].jpg" 
    let url = URL(string: imageURL) 
    let data = try? Data(contentsOf: url!) 
    let theImage = UIImage(data: data!) 
    let Texture = SKTexture(image: theImage!) 
    return SKSpriteNode(texture: Texture) 

} 

私の質問は、どのように私は動的画像情報を渡すべきですか?

  1. 私はないScene.swiftから、代わりにビューコントローラからARAnchorを挿入する必要があり、私はARAnchorをサブクラス化して、私はScene.swift
  2. ARSKViewにアンカーを追加するときにカスタムアンカークラスにIMAGEURLを設定することができます - そして、どういうわけか、そのARAnchorとSKSpriteNodeへのリンクを保持していますか?

答えて

2

これを行うにはさまざまな方法があります。そのため、あなたのアプリやゲームをどのように構築するのが好きですか。あなたがについて尋ね可能性とその実現可能性については、しかし:あなたがあなた自身のARAnchorオブジェクトを作成し、ARSessionにそれらを追加している場合

  1. はい、あなたは画像のような性質を備えてARAnchorサブクラスを(定義することができますURL)を入力し、代わりにそれらを渡します。カスタムクラスは、「相手が出てくる」ときにそのアイデンティティーとコンテンツを保持します。あなたのデリゲートメソッドでそれをチェックするだけの必要があります:

    func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? { 
        if let anchor = anchor as? MyAnchor { 
         let texture = self.textureForURL(anchor.imageURL) 
         return SKSpriteNode(texture: texture) 
        } 
    } 
    

    (ここtextureForURL注あなたがたURLからSKTextureオブジェクトをロードするために使用するものは何でもコードのプレースホルダです。)

  2. あなたを置く場合SpriteKitシーンではなくView Controller内のアンカー管理コードを使用すると、ビューはノードとアンカーの対応を追跡できます。とanchor(for:)のメソッドをARSKViewに表示します。 (。IMHO、SKSceneは、「データ」クラスとしての最高の考えなので、それはロジックを追加するには、サブクラス化のための絶好の場所ではありません)

+0

ので、私は、ビューコントローラにロジックを移動した場合でも - 私はおそらくまだだろう#1のようにARAnchorをサブクラス化したいですか? – MonkeyBonkey

+0

@MonkeyBonkey ARAnchorサブクラスに属性を追加することはお勧めできません。なぜなら、それは私のためにフリーズを引き起こすからです。 –

+0

私はARAnchorサブクラスに1つのプロパティを持っています。私の場合、プロパティは 'view(_:nodeFor:)'を通して正しいですが、後でプロパティ値を失います。 – Caroline

関連する問題