[Swift/ARKit2] ライコウは松屋派、スイクンはすき家派。
概要
先日初めてArkit2を触り、3Dモデルを用いて何かしてみたいなーと思っていたので、ちょうど良い機会だと思い、以下ツイートに便乗。エンテイの後に続き、ライコウとスイクンの牛丼業界参画を支援する。
エンテイも吉野家とか行くんだ pic.twitter.com/a3joquFEg1
— ずみ (@Zmix00) 2019年7月14日
ライコウは松屋派、スイクンはすき家派か。 pic.twitter.com/Ab1KMuY8mJ
— いずみーる(24);毎日個人開発🍺 (@IZUMIRU0313) 2019年7月21日
アーキテクチャ
Xcode上でARKit2を利用して、Swiftでコーディングしています。コード量( ViewController.swift
)は100行もないです。
GitHub
全てのコードを公開しています。解説のためにコードに What
のコメントを残しているので、見れば大体理解できると思います。
解説
以下Qiitaが参考になりました。
ただたしかにクマさんは表示できるのですが、他の free3d でダウンロードした3Dモデル素材ではうまくいかず、ここが一番ハマりました。時にはうまくいくものもあったので、できる素材できない素材で分けていった結果、おそらく素材そのものにテクスチャがないとダメだとわかりました。free3dにはポケモン素材はたくさんあるのですが、ほとんどテクスチャがありませんでした。
そこで自分でテクスチャを貼る方法を調べたのですがいまいち分からず、テクスチャありのライコウとスイクンの3Dモデル素材を探すことにしました。無事以下にありました。他にも3Dモデルの素材置き場は後述しています。
素材の読み込みは適宜変えてください。
//sceneとnodeを読み込み
guard let scene = SCNScene(named: "model.scn", inDirectory: "art.scnassets/Raikou") else {fatalError()}
guard let bearNode = scene.rootNode.childNode(withName: "SketchUp", recursively: true) else {fatalError()}
素材置き場
ポケモンの素材でいうと、以下4つでは確認できました。
その他、人や家具など様々な3Dモデルが以下記事にまとまっているので、参考にしてみてください。
daeからscnの変換方法
Xcode上で変換できます。
rarファイルの解凍方法
素材の中には拡張子が rar
という圧縮ファイルがあります。 brew
で unrar
をインストールして利用してください。
$ brew install unrar
$ unrar e hoge.rar
展望・感想
水平面を検知する度にライコウやスイクンを表示されてしまうので、1体だけ表示するために以下のコードを書き加えたが、ベストプラクティスはなんなのか。
class OnceExec {
var isExec = false
func call(onceExec: ()->()){
if !isExec {
onceExec()
isExec = true
}
}
}
onceExec.call {
// 1度だけ呼びたいコード
}
複雑な構造のモデルの場合は .scn
ではなく .dae
から SCNScene
を作った方が良いのか。
スイクン縮尺ミスって小さくなっちゃったのはご愛嬌。
// Xmを基準にした縮尺を計算
let magnification = 0.5 / w
bearNode.scale = SCNVector3(magnification, magnification, magnification)
Author And Source
この問題について([Swift/ARKit2] ライコウは松屋派、スイクンはすき家派。), 我々は、より多くの情報をここで見つけました https://qiita.com/IZUMIRU/items/e64328a2e59af8e219db著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .