สารบัญ:

การวางวัตถุ AR ที่พิกัด GPS ในความเป็นจริงยิ่ง: 8 ขั้นตอน (พร้อมรูปภาพ)
การวางวัตถุ AR ที่พิกัด GPS ในความเป็นจริงยิ่ง: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การวางวัตถุ AR ที่พิกัด GPS ในความเป็นจริงยิ่ง: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การวางวัตถุ AR ที่พิกัด GPS ในความเป็นจริงยิ่ง: 8 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: คลิปวัตถุประหลาดลึกลับบนดวงจันทร์ เรื่องแปลกๆนอกโลก 2024, กรกฎาคม
Anonim
การวางวัตถุ AR ที่พิกัด GPS ในความเป็นจริงยิ่ง
การวางวัตถุ AR ที่พิกัด GPS ในความเป็นจริงยิ่ง

คำแนะนำนี้กำลังจะไปที่การสร้างแอพมือถือสำหรับวางวัตถุ AR ที่พิกัด GPS ด้วย ARkit และ ARCore โดยใช้ Unity3D ฉันจะแนะนำคุณเกี่ยวกับการตั้งค่าโครงการที่ฉันสร้างโดยใช้ Mapbox ที่ช่วยให้เราสามารถแท็กข้อความที่ตำแหน่ง GPS เฉพาะและเขียนลงในฐานข้อมูล GameSparks

ซอฟต์แวร์และโครงการทั้งหมดที่เราจะใช้ที่นี่ฟรี

ดาวน์โหลด Unity 3D ที่นี่ หากคุณยังไม่มี:

unity3d.com/

ขั้นตอนที่ 1: อุปสรรค…

อุปสรรค์…
อุปสรรค์…

ดังนั้นนี่ไม่ใช่แอปที่ง่ายที่สุดในการสร้างข้อจำกัดในปัจจุบันของ GPS มือถือและเข็มทิศมือถือ

บอกตามตรงว่าวัตถุต่างๆ ปรากฏขึ้นในตำแหน่งที่ควรจะเป็นประมาณ 50% ของเวลาทั้งหมด ดังนั้นผลลัพธ์จึงไม่ค่อยดีนัก แต่จะแม่นยำยิ่งขึ้นเมื่อคุณเข้าใกล้วัตถุมากขึ้น

ไม่ว่าจะด้วยวิธีใด ฉันคิดว่าวิธีที่ดีกว่าสำหรับ AR ที่ใช้ GPS ณ จุดนี้ ก็คือการใช้แผนที่อย่างโปเกมอนโก และเมื่อคุณเข้าใกล้วัตถุ กล้องจะเปิดขึ้นและคุณจะเห็นเฉพาะวัตถุนั้นตรงหน้าคุณ ในอนาคต ฉันต้องการทำการสอนแบบเต็มรูปแบบเกี่ยวกับการปรับใช้ที่เรียบง่ายกว่านี้

ไม่ว่าในกรณีใดฉันเคยใช้ Mapbox มาก่อนและฉันรู้ว่าพวกเขามีคลาสการแปลงที่มีฟังก์ชันสำหรับการแปลงพิกัด GPS เป็นพิกัดโลกของ Unity ฉันคิดว่าฉันสามารถผ่านพิกัด GPS บางอย่างได้ และพวกมันจะปรากฏในที่ที่ฉันต้องการ ไม่ทำงาน

วัตถุปรากฏขึ้นอย่างถูกต้องสัมพันธ์กัน แต่ไม่เคยอยู่ในตำแหน่งที่ถูกต้อง ดังนั้นฉันจึงทำการค้นคว้าและพบว่า Unity Camera ของฉันจำเป็นต้องปรับให้ตรงกับทิศเหนือจริง เพื่อให้วัตถุปรากฏขึ้นมาถูกที่

ปัญหาคือเข็มทิศในโทรศัพท์ของคุณไม่แม่นยำเลย

ขั้นตอนที่ 2: เข็มทิศโง่

เข็มทิศโง่
เข็มทิศโง่
เข็มทิศโง่
เข็มทิศโง่

ปัญหาหลักคือเมื่อคุณวางวัตถุให้ห่างจากกล้อง หากโทรศัพท์ของคุณคิดว่าทิศเหนือจริงอยู่นอกเหนือแม้สองสามองศา วัตถุในระยะไกลก็จะปรากฏอยู่ไกลมาก

ฉันเกือบจะล้มเลิกกิจการนี้แล้ว แต่เพื่อนคนหนึ่งบอกฉันเกี่ยวกับโครงการ GitHub นี้:

github.com/mapbox/mapbox-ar-unity

นี่คือความพยายามในการสร้าง AR "ระดับโลก" จาก Mapbox โดยที่วัตถุจะยึดกับพิกัด GPS เพื่อให้ประสบการณ์ Augmented Reality ทำงานภายนอกได้ในระยะทางไกล แทนที่จะอยู่ภายในห้องเล็กๆ ในบ้านของคุณ

โครงการของพวกเขาใช้ AR Position deltas และ GPS Position deltas เพื่อคำนวณมุมซึ่งเป็นการชดเชยจากกล้อง AR ไปเป็นทิศเหนือจริง ดังนั้นโดยพื้นฐานแล้ว ให้อ่านค่า GPS หนึ่งครั้งเมื่อผู้ใช้เริ่มแอปและให้พวกเขาเดินเป็นเส้นตรงและอ่านค่า GPS อีกครั้ง จากนั้นด้วยสองจุดนี้ คุณจะสามารถบอกได้ว่าบุคคลนั้นกำลังเดินไปทางใด (สมมติว่ากล้องของพวกเขาชี้ไปในทิศทางที่พวกเขากำลังเดิน) พวกเขาพบว่าสิ่งนี้แม่นยำกว่าการใช้เข็มทิศในโทรศัพท์

ปัญหาอื่นที่พวกเขาพยายามแก้ไขคือการดริฟท์ด้วย ARkit การติดตามสามารถทำได้ในห้องเล็กๆ แต่เมื่ออยู่ข้างนอกในระยะทางไกล วัตถุ AR จะลอยไปไกลจากที่ที่ควรจะเป็น

ขั้นตอนที่ 3: ในที่สุดก็มีทางออก

ในที่สุดก็มีทางออก!
ในที่สุดก็มีทางออก!

ดังนั้นโปรเจ็กต์ Mapbox นี้จึงเสนอวิธีที่จะได้ทิศทางการหันที่เชื่อถือได้ซึ่งสัมพันธ์กับทิศเหนือจริง ดังนั้นสิ่งที่เหลืออยู่ก็คือการวางวัตถุในโลก

ฉันลงเอยด้วยการขยายตัวอย่างนี้เล็กน้อย เพื่อที่ฉันจะได้แท็กข้อความที่ตำแหน่ง GPS หนึ่งๆ แล้วเขียนข้อมูลนั้นลงในฐานข้อมูล GameSparks นั่นคือสิ่งที่ผมจะแสดงให้คุณเห็นถึงวิธีการใช้งาน

ปัญหาเดียวของโครงการนี้คือคุณต้องได้รับการจัดตำแหน่งที่ดีก่อนจึงจะสามารถใช้งานได้

สิ่งที่ฉันหมายถึงโดยการจัดตำแหน่งคือเนื่องจาก Mapbox ใช้เดลตาตำแหน่งในการคำนวณส่วนหัว เมื่อคุณเปิดแอปครั้งแรกและคุณต้องตรวจสอบให้แน่ใจว่ามีการตรวจพบระนาบพื้นแล้วเดินเป็นเส้นตรงชั่วขณะหนึ่งจนกว่าจะมีการคำนวณการจัดตำแหน่งที่เหมาะสม

ในแง่นี้ UX เป็นอุปสรรค์อีกประการหนึ่ง แต่ในการปรับปรุงโปรเจ็กต์ พวกเขาให้ตัวอย่างการวางคิวบ์ไว้ข้างหน้าผู้ใช้เพื่อเดินผ่านเพื่อให้แน่ใจว่ามีการจัดตำแหน่งที่ดี

ตอนนี้เมื่อคุณทราบข้อจำกัดของโปรเจ็กต์นี้แล้ว ให้ฉันแสดงวิธีใช้งานเพื่อให้เพื่อนๆ ได้เล่น ในที่สุดคุณจะต้องสร้างบัญชี mapbox และบัญชี gamesparks ซึ่งทั้งสองบัญชีนั้นฟรี ฉันใช้ gameparks เพื่อที่ฉันจะได้บันทึกพิกัด GPS ไว้ที่ไหนสักแห่ง เพราะในระหว่างการทดสอบ คุณจะต้องรีสตาร์ทและสร้างแอปใหม่ค่อนข้างบ่อย

นอกจากนี้ยังควรใช้งานได้กับทั้ง ARkit และ ARcore แต่ฉันมีเพียง iPhone ในขณะนี้เท่านั้นที่ฉันสามารถทดสอบได้

ขั้นตอนที่ 4: ให้แอปทำงาน

ให้แอปทำงานกันเถอะ!
ให้แอปทำงานกันเถอะ!

ก่อนอื่นให้ดาวน์โหลดโปรเจ็กต์นี้จาก GitHub:

บันทึกไฟล์ไปที่เดสก์ท็อปของคุณและเปิดขึ้นใน Unity

ไปที่ไฟล์ สร้างการตั้งค่า และเปลี่ยนแพลตฟอร์มของคุณเป็น Android หรือ IOS

ตอนนี้ไปที่ Mapbox.com และสร้างบัญชี หากคุณยังไม่มี

หยิบคีย์ API ของคุณแล้วกลับไปที่ Unity คลิกแท็บ Mapbox ที่ด้านบน แล้วคลิกกำหนดค่า วางคีย์ API ของคุณที่นั่น

ตอนนี้สร้างบัญชีบน GameSparks.com และคลิกที่ปุ่มด้านบนขวาเพื่อสร้างแอปใหม่

เรียกมันว่าอะไรก็ได้ที่คุณต้องการและคัดลอกคีย์ API และความลับของแอป กลับไปที่ Unity แล้วค้นหาแท็บ GameSparks ที่ด้านบน คลิกที่กำหนดค่าและวางข้อมูลประจำตัวของคุณที่นั่นเช่นกัน

ขั้นตอนที่ 5: กำหนดค่า GameSparks

กำหนดค่า GameSparks
กำหนดค่า GameSparks

ก่อนที่แอปจะทำงาน เราต้องกำหนดค่าฐานข้อมูลของเรา

GameSparks ใช้ noSQL ดังนั้นเราจึงต้องสร้างคอลเลกชันและเพิ่มเหตุการณ์ที่แอปของเราใช้ในการอ่าน เขียน และลบออกจากเซิร์ฟเวอร์ก่อน

ขั้นแรกให้สร้างคอลเลกชันใหม่บนเว็บไซต์ GameSparks และเรียกมันว่าอะไรก็ได้ที่คุณต้องการ

ตอนนี้เราต้องสร้าง 3 เหตุการณ์

สิ่งแรกที่แอปต้องทำคือเขียนวัตถุข้อความลงในฐานข้อมูล

ข้อความมีละติจูด ลองจิจูด แล้วตามด้วยข้อความของข้อความ

ไปที่ตัวกำหนดค่าและเพิ่มเหตุการณ์ใหม่ สร้างรหัสย่อ "SAVE_GEO_MESSAGE"

ใส่สิ่งที่คุณต้องการสำหรับชื่อและคำอธิบาย

เพิ่มรหัสย่อสำหรับ 3 คุณลักษณะ:

"ลัต" "ลอน"

"ข้อความ"

ตั้งค่าแต่ละประเภทข้อมูลเป็นสตริงและตั้งค่าเริ่มต้นเป็น 0 กำหนดให้ประเภทการรวมเริ่มต้นของแต่ละประเภทเป็น "ใช้ในสคริปต์"

ขั้นตอนที่ 6: เพิ่มกิจกรรมสุดท้าย…

เพิ่มกิจกรรมสุดท้าย…
เพิ่มกิจกรรมสุดท้าย…

แอปยังต้องโหลดข้อความทั้งหมดจากฐานข้อมูลและอ่านลงใน Unity เมื่อแอปเริ่มทำงาน เพื่อให้เราสามารถวางข้อความ AR ที่จัดเก็บไว้ในฐานข้อมูลได้

สร้างกิจกรรมอื่นและเรียกมันว่า "LOAD_MESSAGE"

เหตุการณ์นี้ไม่ต้องการแอตทริบิวต์ใด ๆ ใส่สิ่งที่คุณต้องการอีกครั้งสำหรับชื่อและคำอธิบาย

ทำสิ่งเดียวกันสำหรับกิจกรรมอื่นและเรียกมันว่า "REMOVE_MESSAGES"

สิ่งนี้ไม่จำเป็นต้องมีคุณลักษณะใด ๆ เช่นกัน

สิ่งสุดท้ายที่เราต้องทำคือเพิ่ม "รหัสระบบคลาวด์" หรือโค้ดฝั่งเซิร์ฟเวอร์ที่เรียกใช้เมื่อแต่ละเหตุการณ์เริ่มต้นจากแอปของเรา

ขั้นตอนที่ 7: เพิ่มรหัสคลาวด์

ใน GameSparks ไปที่ตัวกำหนดค่าและรหัสคลาวด์

เราจำเป็นต้องเพิ่มสคริปต์ในแต่ละเหตุการณ์ที่เราเพิ่งทำ

ในเหตุการณ์ LOAD_MESSAGE ให้เพิ่มรหัสนี้และบันทึก:

var messageData = Spark.runtimeCollection("GeoMessage");

เคอร์เซอร์ var = messageData.find();

var allMessages = ;

ในขณะที่ (เคอร์เซอร์.hasNext ()) {

var obj = เคอร์เซอร์ ถัดไป ();

ลบ(obj ["_id"]);

allMessages.push(obj);

}

Spark.setScriptData("all_Messages", allMessages); // ส่งคืนข้อมูลทั้งหมด

ในเหตุการณ์ REMOVE_MESSAGES ให้เพิ่มรหัสนี้:

var messageData = Spark.runtimeCollection("GeoMessage");

messageData.remove({});

สุดท้ายในกิจกรรม SAVE_MESSAGES ให้เพิ่มสิ่งนี้:

var geoMessageList = Spark.runtimeCollection("GeoMessage");

var messageLat = Spark.getData(). LAT;

var messageLon = Spark.getData(). LON;

var messageText = Spark.getData(). TEXT;

วาข้อความปัจจุบัน = {

"messLat": messageLat,

"messLon": ข้อความโหลน,

"messText": ข้อความข้อความ,

};

geoMessageList.insert (ข้อความปัจจุบัน);

ขั้นตอนที่ 8: เสร็จแล้ว

เราเสร็จแล้ว!
เราเสร็จแล้ว!

โปรเจ็กต์นี้ใช้ ID เฉพาะของอุปกรณ์ของคุณเพื่อตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ GameSparks เพื่อให้คุณสามารถกลับไปที่ Unity แล้วคลิกเล่น และคุณจะเห็นในคอนโซล "อุปกรณ์ตรวจสอบสิทธิ์…"

ตอนนี้ไปที่ไฟล์สร้างการตั้งค่าแล้วคลิกสร้าง หากคุณไม่เคยสร้างแอปสำหรับ Android หรือ IOS คุณอาจต้องตั้งค่าบัญชีการพัฒนากับ Google หรือ Apple

เมื่อแอปอยู่ในโทรศัพท์ของคุณ คุณต้องตรวจสอบให้แน่ใจก่อนว่า ARKit หรือ ARCore ตรวจพบระนาบพื้น ตอนนี้คลิกปุ่มบันทึกที่มุมล่างซ้าย เดินไปข้างหน้าอีกสองสามก้าวแล้วคุณจะเห็น "การจัดตำแหน่งที่คำนวณ" ปรากฏขึ้นเป็นสีฟ้าอ่อน ตอนนี้ปุ่ม UI ควรปรากฏขึ้น และหากมีการโหลดข้อความใด ๆ ในฐานข้อมูลของคุณ ข้อความเหล่านั้นจะถูกนำไปวางไว้ในโลก

ในการแท็กข้อความ GPS AR ใหม่ ให้เดินไปที่ตำแหน่งที่คุณต้องการให้ข้อความอยู่ แล้วคลิกไอคอนข้อความที่ด้านบนขวาของหน้าจอ พิมพ์ข้อความที่ต้องการแล้วคลิกปุ่มปักหมุด!

แนะนำ: