2019年のやりたいこと(今更編)
こんにちはmorimori(@TatsunoriMorita)です。
2019年もはやくも1ヶ月経ってしまいましたが、今更ですが、今年のやりたいことを表明しておきたいと思います。(ネタが無いわけではないですw)
自分でお金を稼ぐ
会社のサラリーではなく個人でお金を稼ぐ働き方にトライしたいです。
日本人の平均寿命が80オーバーした昨今。自分が60歳になった時には平均寿命100歳超えも夢じゃないと予想されます。
よっぽどの貯金がなければ、死ぬまでの生活費を稼ぐ必要がありますが、何歳まで会社で働くことができるかわかりません。
個人で稼ぐ経験があれば選択肢も広がるし、高齢になって体力的に辛くなっても、ペースを落としながらでも働くことができます。
それに死ぬまで働きたい。のんびり暮らすのは退屈なので。
チームでプロダクトを作りたい
おもしろいプロジェクトや人といった部分に重きをおいてサービスを一緒に作ることをしたい。
切磋琢磨するのが好きなので、モチベーションの高い方たちと一緒にものを作ることで刺激をもらいたいし、刺激を与えたい。
好きでもない人とやるより、バカがつくほど好きでしている人、新しいことを楽しめる人と一緒にやりたい。
個人でプロダクトを作りたい
今までは思いついたアイデアを勢いで作って、しょぼいものをリリースして、あとでアップデートすればいい。
たくさんの人に使ってもらえるもの。新しいものを作る。そんなことを考えてやっていました。
エンジニアとして新しいものを生み出したいという欲望を抱きがちだが、
そもそも今自分が使ってもいない、使ったこともないサービス、それを作って自分が本当に使うのか?
世界で自分しか使う人がいなくても作るのか?
時間をおいて自問してみて、それでも理由があれば、自分にとって本当に必要なものなので、作るべきだと思います。
それ以外で個人開発するなら、自分が普段から使っているものを作る。
自分のよく使うアプリはiPhoneの純正メモアプリです。ブログの下書き、買い物メモ、日記、備考録などに頻繁に使っています。
他のアプリもいくつか使いましたが、結局純正のメモアプリに落ちついています。
ただ文字数が表示されないなど、個人的にかゆいところに手が届かない部分があるので、それなら自分で作ろうと思い、空いた時間に少しずつプロトタイプを作っています。
個人開発の場合、できるだけモチベーションに左右されないようにするのが大切ではないかと思っているので、
仕様とデザインは丸パクリ、わからないところは後回し、モチベーションは上げ過ぎず、低すぎず。
プログラミングもまず雑でも機能を1つ作る。自分を褒める。リファクタリングする。自分を褒める。
一度作っておしまいではなく、何度かスクラップビルドしてより品質を上げるのも必要だと思っているので、こんなことを考えながら最近は実践してます。
AR関係に注目したい
たまたまAppleのARKitを使ってアプリを作る機会を頂き、触ってみた感想としては、「こんなにレベルの高いことができるのか!」というところでした。
もっとしょぼいことしかできないと思っていたが、十分実用化可能な技術水準まできていることを実感しました。
夜間や、移動中に制度が出ないなどの問題もまだありますが、数年もすればそれらの課題も解決されるでしょう。
その時に大切になるのは恐らくインターフェイス。スマートフォンの次にくる眼鏡やコンタクトを装着して新しい世界を見ることになるのは必然だと思います。
スマートフォンの画面を通したARはどこか、冷めた感覚があります。それは画面のフレームの外に現実世界が垣間見えてしまうからです。
映画のアバターを初めて見たとき、その映像技術に驚き、新しい映像世界の足音が聞こえました。ただそこにも、どこか冷めた感覚を感じました。
それは、スクリーンまでの距離感があることで、リアルとバーチャルの境界を感じずにはいられないからです。
その距離を埋めるインターフェイスと合わさった時に、これまでの世界が、リアルとバーチャルの境界がなくなると感じました。
この世界には物質として現実に存在する必要がないものがあると思っています。
例えば道端に立っている広告看板です。立てる場所が必要だし、景観も損なう場合があります。視覚として認識されればいいだけなので、バーチャルで十分です。
こういった物質としてリアルに存在する必要がないものはバーチャルに置き換わった方がいいです。
また、AR技術によって現実には今まで存在しなかったものが、新しく生まれることも予想されます。
非常におもしろい可能性があるので、何かしらエンジニアとしても関わって行きたいと思っています。
バイオリン始めたい
前から始めたいと思っていたので今年は始めてみたい。アパートに住んでいるのでクラッシックは無理だから、
電子バイオリンでアンプと繋いでヘッドホンを使えば大丈夫だと思ってるけど、弓と弦を擦った際の音がどれくらいなのか分からなくて、
楽器屋さんに一度いって触ってからにしようと思って時間が経ってしまいました。今年は実行したい。
70、80歳でバイオリン引けたらかっこいい!
まとめ
他にもあったと思うけど忘れてしまったのでこのくらいで終わりたいと思います。
アイデアややりたいことって定期的に書き留めておかないと忘れてしまうし、日々の仕事や雑務をこなすのに忙しくなって出てこなくなるので
たまにはゆっくり考えるのも良かったです。
ARKit入門 その7 ノードの回転方法
こんちにちはmorimori(@TatsunoriMorita)です。
ARアプリを作成していて、x、y、z軸におけるオブジェクトのポジションについては理解しやすいですが、回転や傾きになるとよくわかんなかったので調べてみました。
はじめに
回転させる方法はいくつかあるようですが、今回はeulerAnglesプロパティを使用しています。
このプロパティはピッチ(x軸)、ヨー(y軸)、ロール(z軸)を基準にして、ノードのラジアン(角度)を設定するものです。
ラジアンについてはこのサイトのおかげで理解できました。
普段使っている180°や90°は度数法という角度の測り方ですが、Xcodeでは度数法ではなくラジアンを使用しています。
ですのでeulerAnglesプロパティに対して直接90と設定しても思った結果が得られません。
3D座標はx、y、z座標の3軸を使用して位置と、回転を表現します。

回転の状態が分かりやすいように今回はSCNPlaneの表面に対してイメージ画像を貼り付けて、どのように回転しているか確認しています。
以下をデフォルト状態としてx軸、y軸、z軸に対して回転させています。
SCNPlaneをデフォルトで表示した場合#AR #ARKit #ios #Xcode pic.twitter.com/kfbtO3EAhF
— TatsunoriMorita (@king_of_morita) 2019年1月14日
ピッチ(x軸)に対して-90°回転させる

SCNPlaneをオイラー角x軸に対して-90°回転させた場合#AR #ARKit #ios #Xcode pic.twitter.com/r02xapY27g
— TatsunoriMorita (@king_of_morita) 2019年1月14日
ピッチ(x軸)に対して90°回転させる

SCNPlaneをオイラー角x軸に対して90°回転させた場合#AR #ARKit #ios #Xcode pic.twitter.com/phuEkONIyI
— TatsunoriMorita (@king_of_morita) 2019年1月14日
ヨー(y軸)に対して-90°回転させる

SCNPlaneをオイラー角y軸に対して-90°回転させた場合#AR #ARKit #ios #Xcode pic.twitter.com/SaxCb7XZSR
— TatsunoriMorita (@king_of_morita) 2019年1月14日
ヨー(y軸)に対して90°回転させる

SCNPlaneをオイラー角y軸に対して90°回転させた場合#AR #ARKit #ios #Xcode pic.twitter.com/tAPxsi1F6I
— TatsunoriMorita (@king_of_morita) 2019年1月14日
ロール(z軸)に対して-90°回転させる

SCNPlaneをオイラー角z軸に対して-90°回転させた場合#AR #ARKit #ios #Xcode pic.twitter.com/idBDGLhkqz
— TatsunoriMorita (@king_of_morita) 2019年1月14日
ロール(z軸)に対して90°回転させる

SCNPlaneをオイラー角z軸に対して90°回転させた場合#AR #ARKit #ios #Xcode pic.twitter.com/K2QOo28EO0
— TatsunoriMorita (@king_of_morita) 2019年1月14日
まとめ
.Pi / 2でラジアン角度の90°を計算しています。これは方程式があるので求めたい角度を代入すれば簡単に計算することができます。
高校入学と同時に理系科目を捨てた身としては、ラジアンやオイラーと言われても何のことやらとなるので、
概念くらい基礎学力として勉強しておけばよかったとちょっと反省しました。
*ツイッターの動画投稿方法間違えて分かりにくくなってしまってすみませんw
ARKit入門 その6 パーティクル・システム

こんちにちはmorimori(@TatsunoriMorita)です。
ARの表現をより一層高めるために、パーティクル・システムを使用します。
今回はプログラムで設定を変更する方法をまとめました。
パーティクル・システムのファイルを作成
XcodeでNewFile -> SceneKit Particle System Fileで.scnpファイルを新規に作成します。
テンプレートとしてbokeh、confetti、fire、rain、reactor、smoke、starが用意されているので、作成したいパーティクルに近いものを選択してパラメータを調整します。
今回はfireテンプレートを選択しました。


今回はviewDidLoad内に、新規で作成したSCNNodeにパーティクル・システムを設定しています。
(ship.scn内のオブジェクトは削除してあります。)

パーティクルの色

particleColor - SCNParticleSystem | Apple Developer Documentation
パーティクルの色を変更#AR #ARKit #iOS #Xcode pic.twitter.com/vnEhaB10o9
— TatsunoriMorita (@king_of_morita) 2019年1月3日
パーティクルの放出量
値が大きいほど放出される粒子の量が多くなる。

birthRate - SCNParticleSystem | Apple Developer Documentation
パーティクルの放出量を変更#AR #ARKit #iOS #Xcode pic.twitter.com/OKp9Mp9HPN
— TatsunoriMorita (@king_of_morita) 2019年1月3日
パーティクルの全体形状
emitterShapeに放出したい形状を設定すると、パーティクルの全体形状がプレート型、ボックス型に出力できる。

emitterShape - SCNParticleSystem | Apple Developer Documentation
パーティクルの全体の形状を変更
— TatsunoriMorita (@king_of_morita) 2019年1月3日
(円筒)#AR #ARKit #iOS #Xcode pic.twitter.com/nveySbJ7po
パーティクルのサイズ
粒子のサイズを設定。デフォルト設定は1。

particleSize - SCNParticleSystem | Apple Developer Documentation
パーティクルサイズ変更
— TatsunoriMorita (@king_of_morita) 2019年1月3日
(デフォルトサイズ1)#AR #ARKit #iOS #Xcode pic.twitter.com/gdwQUFMErw
新規パーティクルの生成期間
デフォルト設定は1秒。0秒の場合すべてのパーティクルが瞬時に出現する。

emissionDuration - SCNParticleSystem | Apple Developer Documentation
新規パーティクルの生成時間変更
— TatsunoriMorita (@king_of_morita) 2019年1月3日
(5秒間隔)#AR #ARKit #iOS #Xcode pic.twitter.com/oSwMdTM1pR
パーティクルを生成しない時間
生成しない時間を設定する。

idleDuration - SCNParticleSystem | Apple Developer Documentation
パーティクルを1秒間隔で生成しないように設定#AR #ARKit #iOS #Xcode pic.twitter.com/wpuxaSpKwj
— TatsunoriMorita (@king_of_morita) 2019年1月3日
パーティクルの表示期間
パーティクルが生成されてから、消えるまでの時間。デフォルトが1秒。

particleLifeSpan - SCNParticleSystem | Apple Developer Documentation
パーティクルのライフサイクル設定
— TatsunoriMorita (@king_of_morita) 2019年1月3日
粒子の生成から消滅までの時間を0.5秒に設定#AR #ARKit #iOS #Xcode pic.twitter.com/f7sMinJq4W
パーティクルの動作スピードを変更
デフォルト値1秒。値を大きくするとパーティクルの動きが早くなり。小さくすると動作が遅くなる。

speedFactor - SCNParticleSystem | Apple Developer Documentation
パーティクルの動作スピードを0.1秒に設定#AR #ARKit #iOS #Xcode pic.twitter.com/9a0QebYCvA
— TatsunoriMorita (@king_of_morita) 2019年1月3日
パーティクルの引き伸ばし
移動方向に対してパーティクルを引き伸ばす。デフォルトは0。

stretchFactor - SCNParticleSystem | Apple Developer Documentation
パーティクルの引き伸ばし設定#AR #ARKit #iOS #Xcode pic.twitter.com/pITDpgNDpz
— TatsunoriMorita (@king_of_morita) 2019年1月3日
まとめ
他にもいろいろ設定はありますが、きりがないのでこのくらいにして、機会があれば別途調査したいと思います。
オブジェクトを配置しただけだと、視覚的にインパクトが欠ける場合や、アニメーションを加えることで表現の幅をもたせたい時に上手く使用できると武器になりそうです。
こどもの頃に勉強しろと言われたけど、その理由がわからなかった

こんちにちはmorimori(@TatsunoriMorita)です。
こどもの頃は両親に勉強しろとよく言われた。
その時、決まって聞き返していた言葉が
"なんで勉強しなければいけなの?"だった。
受験生になって、あまりいい成績ではなかったため、両親には、口答えばかりして勉強しなかったツケが回ったのだとよく言われた。
ツケが回ったとは少しも思っていなかったけれど、今思うことは、
純粋に”なぜ勉強をする必要があるのか”、その答えが知りたかっただけだった。
納得のいく答えがあれば、自分も勉強をする必要性を理解し、そんな質問をすることもなかったのではないかと思う。
当時の自分の質問に対する両親の答えは、
「勉強しなければ大人になってから困る」だった。
おそらく、"なぜ勉強しなければ大人になってから困るのか"、"なぜいい会社に入らなければ困るのか"、なぜなぜ攻撃をしたような気がする。
うっすら覚えているのは、”大人は仕事をしてお金を稼いでいるのに勉強せず、こどもに勉強しろと言うのはおかしいのでは?”という疑問だった。
うちの両親はお世辞にも家で勉強しているところを見た記憶がない。
そういった背景もあって、疑問を持たずにはいられず、その答えを知りたかったのだと思う。
うちの両親を悪く言うつもりもないし、実際に他の家庭の両親より勉強していたのか、優劣はのつけようがないので、その問題は置いておくとして。
勉強すべき理由が、”大人になってから困る”という回答について少し考えてみたいと思う。
自分が小学生の頃だから、1990年代前半。
Wikiを参照するとバブル源経済が崩壊し、のちに失われた10年と言われた時代になる。
反対に両親は60代なので、日本の経済が右肩上がりに成長する中で、教育、就職を経験した世代ということになる。
日本の高度経済成長によってその威力をはっきした、終身雇用と年功序列制度によって、いい会社に入って、一生安泰で、給料も右肩上がりで、退職金をたくさん貰えれば、老後も安心して暮らせると言われてきたのだろう。
いい会社に就職するには、いい大学に行く必要がある。そのためには勉強をして、いい成績を残さなくてはならない。
いい会社に入ることができなければ、安心した老後を暮らせないとなると、"勉強しなければ大人になってから困る"という回答は当時としては正しかったと思う。
ただ、こどもに対する説明としては適切じゃなかったのではないか。
もし、自分に子供がいて
”なぜ勉強をする必要があるのか”と聞かれたらなんと答えるか。
基本的には学校の勉強は読み書き算数ができて、社会生活を営むスキルがあれば取り敢えずはいいと考えているので、その基準を満たしてくれれば問題ない。
大切なのは、知らないことを知る楽しさを養うこと。
その楽しさがわかれば、自発的にいろんなことに興味関心をもって取り組めるようになると思う。
なので
”なぜ勉強をする必要があるのか”と聞かれたら、
”知的好奇心を養うため”と答えたい。
あなたなら何と答えますか?
ARKit入門 その5

こんちにちはmorimori(@TatsunoriMorita)です。
前回は平面認識した場所にプレーンオブジェクトを配置し、四角形オブジェクトを落下させてみました。
最終的にはテトリスっぽいものを作って行きたいので、今のままでは落下する四角形オブジェクトの速度が早すぎるため、遅くなるように調整してみたいと思います。
落下スピードを変える方法
落下する重力を変更する方法を考えましたが、SCNPhysicsBodyには重力を変更するプロパティはありません。
代わりにmassプロパティで質量を変更できるので、デフォルトの1Kgから0Kgへ変更したところ、落下を停止することができました。
ただ、限りなく0に近づけても落下スピードが減速させることはできませんでした。
数学と物理を高校で捨てた頭ではよくわからない。。。
調べてみるとシーン内の重力設定自体を変更する方法を発見!
その値を変更すれば、落下する四角形オブジェクトの速度を変更することが可能に。

ただし、物理演算の対象にしているため、オブジェクト同士が衝突した反発で勝手に移動してしまう。
テトリスのように、ブロックを積んでいくには不向きなので、現実世界の重力を使わずにアニメーションでブロックを移動させる方が良さそうです。
コード全体
まとめ
今回はシーン内の重力を変更することで、オブジェクトの落下スピードを変更しました。
他にも空気抵抗を変更することで、落下スピードを変更できると教えてくださる方がいて、大変勉強になりました。
発信する人のところに情報が集まるというのは本当ですね。
落下速度は重さでは変わらないはずですよ、空気抵抗で変わるはずです
— kiyo (@DHorkin) 2018年12月16日

テトリスの作り方を調べたところ、マス割されたフィールドの上から下にブロックの表示を切り替えて表現することを知ったので、その方法で試して行きたいと思います。
人の数だけ歴史がある、自分史を振り返ってみよう!!(Since2009)

こんちにちはmorimori(@TatsunoriMorita)です。
この記事はAdvent Calenderの16日目の記事になります。
人生で初のアドベントカレンダーであり、2018年も残りわずか、プログラマーになってちょうど4年が経ったのでこの機会に社会人になってからの自分の歴史を振り返って見ようと思います。
年代が曖昧な部分もあるけど、そこはご了承下さい。
Morita暗黒の営業時代(2009年~)
愛知県の大学を卒業して、東証一部上場の製造業のメーカーに営業職で入社しました。
なぜその会社を選んだかというと、特にやりたいことがなく、たまたま受かったからというのが理由です。
周りが合同説明会に参加している中、自分は一度も参加せず、履歴書も結構適当に書いて出すいい加減な就活生でした。
ちょうどリーマンショックで内定取り消しが問題になった時期でしたが、幸運にも内定取り消しにはならず、社会人になることができました。
就職して、初任地として配属されたのが富山県の営業所で、そこには50代の所長1人しかいませんでした。つまり自分を含めて2人だけの営業所。
仕事は基本ルート営業で、決まったお客さんを訪問して使ってもらってる製品の使用感や、在庫管理が主な業務でした。
飛び込み営業はなく、どちらかというとホワイトな仕事内容でした。
ただ、そんなにコミュニケーション能力が高いわけでもなく、お客さんも年配の方が多いので話が合わないし、営業職の価値が見いだせなく、
自分には向いていないと思っていました。正直なところ、何が一番嫌だったかと言えば、あまり仕事がなく、暇だったことです。
暇をつぶすために仕事を作る。この無駄なことが嫌いでした。
Morita読書に出会う(2009年~2012年)
富山県で一人暮らしを初めて、日経新聞を取り始めました。社会人=日経新聞のイメージが強かったので、社会人なら日経新聞を読んで当たり前と思っていました。馬鹿ですね。
購読してびっくりしたのは、書いてあることがさっぱり分からなかったことです。
社会人になりたての馬鹿だったので、『社会人になるとこんな難しいことが分からないとだめなのか!!このままではまずい!!』と雷に撃たれるくらいの衝撃でした。
振り返ってみると、日経新聞ではなく、スポーツ○地とか芸能人のゴシップネタが多く載っているような新聞を購読していたら、恐らく今こうしてブログを書いていなかったくらい、自分の人生に大きな影響を与えました。
自分の無知さに焦りを感じた時に出会ったのが、テレビ朝日で放送していた『池上彰のニュースそうだったのか!!』。
解説がわかりやすかったので、出版されている著書を片っ端から買って読みまくりました。
次第に知らないことを知るのが楽しくなって、池上さん以外の本も読むようになっていきました。
Moritaプログラミングを始める(2012年~)
多読、乱読をするなかで、リブセンスのも村上太一さんの『リブセンス<生きる意味>』や、サイバーエージェントの藤田晋さんの『渋谷で働く社長の告白』を読んでプログラミングに興味を持ちました。
社会人になって多少仕事にもなれた頃で、何か新しいことを始めたいと考えていた時期でもありました。
新しく趣味を始めるにあたって、当時の仕事にも多少関係していた陶芸か、プログラミングのどちらをやろうか悩んだ結果、時間と場所に縛りがないプログラミングをすることにしました。
プログラミング言語がたくさんあって、どれをやればいいか分からなかったので、身近で使うものを作った方が気合が入ると思い、客先に納品する製品の納期管理アプリを作るために、iOSアプリ開発用のMac book Airを購入しました。
Macは20万もしたので、さすがに購入を躊躇われましたが、投資だと思ってボーナスで購入しました。
今考えるとそのMacを購入したからこそ、プログラマとして給料を稼げているので、安い買い物でした。
ちなみに、趣味でプログラミングを選ばずに陶芸を選んでいたら、今頃陶芸家を目指していたかもしれませんw
結構はまると突き詰めるタイプなので、土をこねてたかも。
iOSアプリ開発は全然わかりませんでしたw
サンプルコードが載った本を写経したり、ネットで自分が実装したい機能のコードを探して真似してみたりしたが、その都度エラーが出てなかなか進まず。
周りに聞ける人もおらず、ひたすらトライアンドエラーの中、ストレスでPCを窓から投げ捨てたくなることも多々ありました。
ただ分からなかったこと、できなかったことができた時に、脳内でアドレナリンが大量放出されて、天才になった気分になれるのがたまらなく好きでした。
結局大したものは作れなかったのですが、毎日仕事終わりから寝るまでの時間で少しずつプログラミングしていました。
Moritaプログラマになる(2014年~)
趣味でプログラミングをしていましたが、自分の思ったものが作れるようにレベルアップがしたい、本格的に仕事としてプログラミングをしたいと思うようになっていました。
そんなことを思っている折に、朝会社へ行くと、突然広島への転勤を伝えられました。
その時、頭の中でいろんな考えが一瞬にして駆け巡り、導き出した答えが退職してプログラマーに転職しようと思い、その場で退職する旨を上司に伝えました。
正直なところ、転勤の辞令がなければもう少しだらだら営業職をしていたかもしれません。その当時は会社の辞め時みたいなものが分からなかったのと、5年も富山に住んでらけっこう気に入っていたので、ちょっと寂しい気持ちもありました。
仕事に対してとてもスピード感のある上司だったので(というかめちゃせっかちw)、今仕事をする上でとても役立っているし、はじめての部下だったので、とても可愛がって貰えたことは非常に感謝しています。
今でもたまにラインのメッセージが来るのと、Facebookの友達になっているので、上司が何かアップしているのを見つけたらコメントしてます。元気そうなのでなによりです。
住む場所とお金がなかったので、愛知県の実家に戻り転職活動をしました。
IT起業をいくつか受けて、最終的には友達が努めていた今の会社に就職しました。
SESで客先常駐ではありましたが、憧れていたプログラマーで、新しい世界で勉強になることも多くあり、それなりに楽しかったです。やはりものを作るのは楽しいです。
最初の数年は分からないことだらけだったので、家に帰ってから明日やる作業の実装を試しにやってから、次の日に職場で同じように実装して作業を進めていました。(職場の仕事を持ち帰りできないので)
数年が経って、スキルに余裕が出てきた頃から、自分でなにかサービスを作ってお金を稼いで生活して行きたいと思うようになりました。
ただ作り上げるモチベーション維持と、作った後に続けていくモチベーション維持がとても難しかった。
そこに関してはまだまだ試行錯誤と実験が必要だと感じています。
Moritaの現在とこれから(2018年末~)
現在は会社の同僚に頼まれて、3月にある某市のワークショップで披露するARアプリの開発をやっています。
仕事でやっているわけではないですが、入社当時からお世話になった人なので全力で取り組んでいるところです。
以前からARには興味があったので良い機会を貰えたのと、今までにやったことがない分野なので分からないことが多いけど楽しいです。
今後については、取り敢えず3月で今の会社を退職する旨を伝えてあるのでその予定です。
できるだけ個人としてお金を稼いでいく方向にシフトしたいので、フリーランスになるのか、どうしたものか検討中です。
せっかく入江開発室のアドベントカレンダーとして書かせてもらったので、入江開発室に入って今現在感じているメリット、デメリットも書いておこうと思います。
メリットとしては、同じ志を持った人が多く集まっている、情報感度が高い、チーム開発の経験が得られるところだと感じています。
チーム開発の経験は、個人プロジェクトでも活用できているので非常に参考になりました。
デメリットとしては、プロジェクトに参加してコミットした時が一番メリットを感じやすいが、反対にいろいろな理由でコミットできないと学びは少ないかも。
まとめ
自分のことや、思っていることを文章にすると頭の中が整理されていいですね。
文章が短くなるようだったら、ITに興味を持った大学時代の話も付け足そうかと思ったけど、なんだかんだ長くなったので止めておきます。
2019年が自分と、この記事を読んで下さった方にとって、良いものになりますように。
ちょっとはやいけど、メリー・クリスマス&良いお年を!!
ARKit入門 その4

こんちにちはmorimori(@TatsunoriMorita)です。
前回の続きで現実世界にオブジェクトを置くことができました。
ただし現実世界のX座標、Y座標、Z座標にオブジェクトを置いているだけなので、空中に浮いた状態となっています。
今回はARKitの平面認識機能を使って、認識した平面に、重力で落下するオブジェクトを置いてみます。
オブジェクトに重力を持たせる
SCNNodeのSCNPhysicsBodyプロパティに、物理的な形状の情報を設定すれば、物理演算の対象になります。
SCNNodeには大きく分けて、GeometryとSCNPhysicsBodyという、2つの構成があります。
Geometryには、四角や丸などの3Dオブジェクトの情報を持っており、SCNPhysicsBodyには、物理的な形状や重力などの物理シュミレーションのための情報を持っています。
つまり、四角形オブジェクトを追加しているSCNNodeに対して、SCNPhysicsBodyプロパティで重力設定をして上げればいいということになります。

追加したコードは一行だけになります。
Typeをdynamicにすることで、四角形オブジェクトに重力が加わるように設定しています。

ビルドしてアプリを実行してみると、タップして生成された四角形オブジェクトが、重力の力で奈落の底まで落ちていくのが分かります。
オブジェクトに重力設定したら、奈落の底まで落ちて行く〜
— TatsunoriMorita (@king_of_morita) 2018年12月5日
次は平面検知してオブジェクトが止まるようにしよう#AR #ARKit pic.twitter.com/21pqIXpwEM
平面認識した場所にオブジェクトを置く
重力を持たせたオブジェクトは、衝突するものがなければ永遠に落下をしていきます。
ここでは、ARKitの機能で認識した平面に対してプレートを配置して、重力をで落下するオブジェクトが衝突すると、プレートオブジェクトの上で止まるように改良します。
仕組みとしては、平面認識で取得したanchorの位置と、大きさに対応したプレートオブジェクトを持ったSCNNodeを生成し、衝突判定を加えたものをフレームが更新される毎に位置とサイズを補正させます。

アプリを実行すると認識された平面に対して、緑色のプレートオブジェクトが生成され、その上に四角形オブジェクトが置けます。
現実世界で平面認識したところ(分かりやすく緑に塗ったところ)に、重力を持たせた仮装オブジェクトを置くことができたぜ!!#AR #ARKit pic.twitter.com/7vhICxabpJ
— TatsunoriMorita (@king_of_morita) 2018年12月8日
今回のコードの全文をGithubにアップしています。
まとめ
四角や丸などのオブジェクトをSCNNodeにセットし、それを画面のSceneに貼り付けているイメージになります。
今回のような物理判定は、SCNNodeのSCNPhysicsBodyプロパティでいろいろ変更できるので、使いこなせるようにしましょう。
次回は四角形オブジェクトの落下スピードを変更してみたいと思います。