105 Views
March 14, 18
スライド概要
「LIFULL HOME'S App Night」 講演者:エンジニア 又来
※同イベントは、株式会社LIFULLが主催するLIFULL HOME'S アプリについて知見や情報を共有するイベントです。
私たちLIFULLはiOS11から追加されたARKitをLIFULL HOME'Sアプリに追加し、iOS11リリースと同時に最速リリースしました。
その後、App Storeの特集枠・Today枠への掲載をはじめ、ARKit事例として複数のWebメディアに取り上げられました。
ノンゲーム会社がARプロジェクトの発足から企画・デザイン・開発〜リリースまでに、どんなことをしたのか、UXってなんだろう?を軸に、企画開発に関わった各職種メンバーが語った登壇資料となります。
・どういう視点でUXを設計したらよいか悩んでいる
・iOSの新機能を取り入れたいけど、機能的に追加するだけじゃなくて良いユーザー体験を提供したい
・興味あるけどARアプリ開発ってどんな感じ?
・UXを意識したARアプリを作りたいっ!
・肝心なモデルとかってどんな感じに作っているの?
・実際にARアプリをリリースしている人の話が聞きたい
LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。
"3࠷ରԠΛͨؒ͠औΓܭଌͷൿ ࣜגձࣾ-*'6-৽69։ൃ෦σόΠειϦϡʔγϣϯ෦ ։ൃάϧʔϓ ຢདྷ܆
ࣗݾհ wࣜגձࣾ-*'6-- wຢདྷͨ ܆Β͓ wJ04&OHJOFFS wझຯͰਫӭ wܦӦֶΛઐ߈ w.VTJD'FT🎉
ΞδΣϯμ ARKitͷ͓͞Β͍ ௐ͔ࠪΒ։ൃ·Ͱ ܭଌͷ ํͤݟ NGஊ
"3,JUͷ͓͞Β͍ Ͱ͖Δ͜ͱ։ൃ࣌ w ฏ໘ݕग़ˑ w ϙδγϣϯτϥοΩϯά w ϙΠϯτΫϥυ ࣍Ͱ্ݩͷ࠲ඪݕग़ w पғͷ໌Δ͞ਪఆ w ۭ࣮ؒݱͷͨΓఆ
"3,JUͷ͓͞Β͍ Ͱ͖ͳ͍͜ͱ w ࣮ݱͷମͷԞʹӅΕΔ͜ͱ͕Ͱ͖ͳ͍ w ۭؒશମͷઈରҐஔѲ͕͍͠ w ۭ࣮ؒݱͷҐஔͱͷؔ࿈͚ͮ˞ݶఆత w ϚʔΧʔτϥοΩϯά
ௐ͔ࠪΒ։ൃ·Ͱ
ެࣜͷαϯϓϧΞϓϦΛࢼ͠ͳ͕Βௐࠪ ॳΊͯಈ͔ͨ࣌͠ʮ͛͢ʔ!!ʯͷҰݴ ͱʹ͔͘ฏ໘ʹΛஔ͘ΈΛௐࠪͨ͠
࠲ඪ؆୯ʹऔಘͰ͖ͨ
/// ੈ࣮ݱքͷ࠲ඪʹม
///
/// - Parameter screenPosition: CGPoint
/// - Returns: SCNVector3
func realWorldVector(screenPosition: CGPoint) -> SCNVector3? {
let results = self.hitTest(screenPosition, types: [.existingPlane])
// Χϝϥʹ͍ۙॱͷྻ͕औಘͰ͖Δ
guard let result = results.first else {
return nil
}
// SCNVector3
return SCNVector3.positionFromTransform(result.worldTransform)
}
"3,JUͰ࠲ඪΛऔಘͯ͠4DFOF,JUͰදࣔ ARKitͰऔಘͨ͠࠲ඪΛʹݩΦ ϒδΣΫτΛஔ • ARͰΦϒδΣΫτΛѻ͏ࡍ ɾ3Dͷ߹ → ARSCNView (AR + SceneKit) ɾ2Dͷ߹ → ARSKView (AR + SpriteKit)
ܭଌͷ
চͷ্ʹઢΛҾ͘ w ը໘தԝͷচ্ͷ࠲ඪΛऔಘ w औಘͨ͠࠲ඪʹ/PEFΛՃ w ྡΓ߹͏ಉ࢜Λ͙ܨઢ/PEFΛՃ w ࠲ඪʹ͔ͬͯϗʔϜζ͘Μ͕Δ ϦΞϧλΠϜʹઢΛҾ࣮͘ྫ • https://github.com/levantAJ/Measure
໘ੵͷࢉܭ w ଟ֯ܗͷ໘ੵ֤ͷ࠲ඪΛͬͯࢉܭ
ؒऔΓਤͷ࡞ w ̍ͱ̎Λͭͳ͙ลΛਫฏʹͳΔΑ͏ʹ࠲ඪΛճస w ϑϩʔϦϯάͷը૾Λෑ͖٧ΊͯؒऔΓΒ͠͞Λදݱ ɹɹɹɹ˞ॳظͷը૾ ɹɹɹɹ͍ͨؒऔΓʹͳͬͯ͠·ͬͨ
ؒऔΓܭଌ·Ͱͷ·ͱΊ ܭଌͷํ ؒऔΓͷࢉܭΛߦ͏ͨΊʹɺੈ࣮ݱքͷ࠲ඪΛऔಘͯͦ͠ͷ࠲ඪΛཧ͢Δඞཁ͕͋Δ ˞ܭଌͷํ๏ʹ͍͔ͭ͘ͷλΠϓ͕͋ΔͷͰҙ ܭଌͷྲྀΕ ͨݟଆͷॲཧ"3,JUͰܭଌ࠲ඪΛͯ͠ࢉܭʹݩඳ͍ࣸͯ͠Δ ฏ໘ͷೝࣝ λοϓͨ͠Օॴ ฏ໘ ͷ࠲ඪΛܭଌ ܭଌͨ͠࠲ඪΛʹݩ໘ੵͱը૾Λ࡞
͋ͱʹ͚ͩํͤݟྗ
)VNBO*OUFSGBDF(VJEFMJOFT w ՄೳͳݶΓɺจ຺ͰώϯτΛఏ͢ڙΔ w ࢦࣔςΩετΛදࣔ͢Δඞཁ͕͋Δ߹ɺ͠Έ͍͢༻ޠΛ༻͢Δ w ͕ൃੜͨ͠߹ɺՄೳͳमਖ਼ҊΛ͑Δ ϗʔϜζ͘ΜͱͷରΛॏࢹ
ৼΓฦΔΞΫγϣϯ // ಛఆͷNodeʹର͔ͯͤ͠Δ͜ͱՄೳ let constraint = SCNLookAtConstraint(target: SCNNode) constraint.isGimbalLockEnabled = true textNode.constraints = [constraint] সৼͰإΓฦΔϗʔϜζ͘Μ͕ՄѪ͍☺
ಈ͖ϞσϧɺදΛΈ߹Θͤͯදݱ ΫϦεϚεόʔδϣϯ ௨ৗ࣌
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠