版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2019.02.12 星期二 |
前言
Unity是由Unity Technologies開(kāi)發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲葵硕、建筑可視化、實(shí)時(shí)三維動(dòng)畫(huà)等類(lèi)型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)工具欺栗,是一個(gè)全面整合的專(zhuān)業(yè)游戲引擎。Unity類(lèi)似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開(kāi)發(fā)環(huán)境為首要方式的軟件旗们。其編輯器運(yùn)行在Windows 和Mac OS X下,可發(fā)布游戲至Windows较剃、Mac纬朝、Wii、iPhone掀潮、WebGL(需要HTML5)菇夸、Windows phone 8和Android平臺(tái)。也可以利用Unity web player插件發(fā)布網(wǎng)頁(yè)游戲仪吧,支持Mac和Windows的網(wǎng)頁(yè)瀏覽庄新。它的網(wǎng)頁(yè)播放器也被Mac 所支持。網(wǎng)頁(yè)游戲 坦克英雄和手機(jī)游戲王者榮耀都是基于它的開(kāi)發(fā)薯鼠。
開(kāi)始
首先看下寫(xiě)作環(huán)境
C# 6, Unity 2018.1, Unity
增強(qiáng)現(xiàn)實(shí)(AR)突然成為每個(gè)人口中的流行語(yǔ)摄咆。 感謝Vuforia
,開(kāi)發(fā)人員可以通過(guò)數(shù)字內(nèi)容輕松增強(qiáng)物理世界人断。 盡管ARKit
和ARCore
的推出有助于提高增強(qiáng)現(xiàn)實(shí)的意識(shí),但許多其他平臺(tái)和SDK已經(jīng)有一段時(shí)間了朝蜘。其中之一是Vuforia
恶迈;最近,Unity與Vuforia合作partnered with Vuforia
谱醇,并將AR平臺(tái)集成到Unity游戲引擎中暇仲。
在本教程中,您將使用與Unity游戲引擎集成的Vuforia SDK
制作AR游戲副渴。 在此過(guò)程中奈附,您將學(xué)習(xí)以下關(guān)鍵組件:
- 設(shè)置增強(qiáng)的相機(jī)Feed
- 圖像跟蹤 - 它是什么以及它是如何工作的
- 將您的數(shù)字內(nèi)容附加到物理對(duì)象
- 創(chuàng)建由相機(jī)看到的自定義交互
- 什么餡料最適合披薩
Developing AR Games in Unity
市場(chǎng)上有許多AR headsets
,但AR應(yīng)用的主要目標(biāo)是移動(dòng)領(lǐng)域煮剧,如iOS和Android斥滤。 這是Unity
和Vuforia
的組合方便的地方 - 跨平臺(tái)開(kāi)發(fā)。 另一個(gè)好處是你可以在編輯器中測(cè)試你的應(yīng)用程序勉盅。 要做到這一點(diǎn)佑颇,您只需要一個(gè)網(wǎng)絡(luò)攝像頭!
在開(kāi)始之前草娜,請(qǐng)下載最新版本的Unity并安裝Vuforia
增強(qiáng)現(xiàn)實(shí)支持組件挑胸。 如果您使用的是Unity Hub,則可以將此組件添加到已安裝的Unity版本中宰闰。
現(xiàn)在您已擁有Unity
茬贵,Vuforia
和網(wǎng)絡(luò)攝像頭,您需要在Unity中打開(kāi)How to Make an AR Game Using Vuforia Starter
移袍。 加載項(xiàng)目后解藻,打開(kāi)Scenes
文件夾中的Starter
場(chǎng)景,然后查看Hierarchy
窗口:
在快速查看其中的內(nèi)容后葡盗,點(diǎn)擊編輯器中的Play
按鈕舆逃,準(zhǔn)備好在這個(gè)與披薩相關(guān)的游戲中完成一些訂單。
很酷,那是一些意味著披薩播放路狮,但真正的挑戰(zhàn)是把它變成AR游戲虫啥。
注意:本教程的UI資源是從shareicon.net下載的。
Introducing the Sous Chef, Vuforia
為此奄妨,您將使虛擬披薩出現(xiàn)在您可以在現(xiàn)實(shí)世界中保存的跟蹤器圖像上涂籽。 一旦你為訂單添加了toppings
,你就可以通過(guò)將比薩餅移出相機(jī)的視線(xiàn)來(lái)實(shí)際“服務(wù)”比薩餅砸抛。
首先评雌,您需要將主攝像頭(Main Camera )
換成AR攝像頭(AR Camera)
。 從場(chǎng)景中刪除主攝像頭直焙,然后在層次結(jié)構(gòu)中右鍵單擊景东。
接下來(lái),添加Vuforia - > AR Camera
奔誓。 當(dāng)你這樣做時(shí)斤吐,你會(huì)得到這個(gè)彈出窗口:
單擊Import
并等待Vuforia Package
導(dǎo)入到項(xiàng)目中,這會(huì)添加相當(dāng)多的文件厨喂。
您可以忽略Editor
和Streaming Assets
文件夾中的新文件和措。那些文件只是模板文件;您需要的那些包含在項(xiàng)目中蜕煌。
Vuforia
文件夾包含Vuforia
平臺(tái)使用的所有預(yù)制件和腳本派阱,您將要使用這些預(yù)制件和腳本。
值得一提的最后一個(gè)文件是VuforiaConfiguration
斜纪,它位于Resources
文件夾中贫母。包含此文件是因?yàn)槟枰S可證才能開(kāi)發(fā)Vuforia
應(yīng)用程序。但是盒刚,如果您愿意颁独,可以使用 Vuforia Developer Portal獲得免費(fèi)的開(kāi)發(fā)人員許可。
注意:如果項(xiàng)目中缺少
App License Key
伪冰,您可以在README
文件中找到該密鑰誓酒。將字符串復(fù)制到VuforiaConfiguration
文件的inspector
字段中。
現(xiàn)在您已經(jīng)在場(chǎng)景中使用了AR Camera
贮聂,您還需要做一件事靠柑。打開(kāi)增強(qiáng)現(xiàn)實(shí)!
轉(zhuǎn)到Edit -> Project Settings -> Player
吓懈。向下滾動(dòng)到XR Settings
所在的底部歼冰,并確認(rèn)已選中Vuforia Augmented Reality Supported
。
在編輯器中按Play
耻警,并向自己打招呼隔嫡!
注意:如果您點(diǎn)擊播放并且遇到
Vuforia Initialization Failed
屏幕甸怕,請(qǐng)嘗試重新啟動(dòng)Unity。 這是一個(gè)只出現(xiàn)在某些系統(tǒng)上的隨機(jī)錯(cuò)誤腮恩。
Introduction to Image Recognition
我相信你看起來(lái)很可愛(ài)梢杭,但披薩游戲怎么辦?
Vuforia
的默認(rèn)方式是使用圖像識(shí)別(Image Recognition)
秸滴。 圖像識(shí)別武契,也稱(chēng)為跟蹤器識(shí)別或圖像跟蹤,是相機(jī)檢測(cè)預(yù)定圖像并知道如何處理它的過(guò)程荡含,例如在其上呈現(xiàn)一些內(nèi)容咒唆。 當(dāng)跟蹤圖像以某種方式匹配內(nèi)容時(shí),這最有效释液,例如全释,渲染建筑物的樓層平面圖可能在建筑物的圖片上方很好地工作。
工作原理:選擇一個(gè)好的跟蹤圖像至關(guān)重要误债。 使用Vuforia時(shí)浸船,您可以將所選圖像上傳到開(kāi)發(fā)人員門(mén)戶(hù)網(wǎng)站,以查看它的跟蹤情況找前,這是您在開(kāi)始開(kāi)發(fā)之前應(yīng)該做的事情。 開(kāi)發(fā)人員門(mén)戶(hù)網(wǎng)站為您的圖像提供評(píng)級(jí)判族,但更重要的是躺盛,它會(huì)向您顯示“特征點(diǎn)”。 對(duì)于一個(gè)好的跟蹤器形帮,這些特征點(diǎn)應(yīng)該密集地分布在圖像周?chē)鴽](méi)有重復(fù)的圖案槽惫。 在運(yùn)行時(shí),攝像機(jī)會(huì)查找這些特征點(diǎn)辩撑,以幫助計(jì)算相對(duì)于圖像的位置界斜。
對(duì)于本教程,已經(jīng)設(shè)置了圖像和跟蹤數(shù)據(jù)庫(kù)合冀。 披薩圖像文件位于您之前下載的Materials
文件夾中各薇。 理想情況下,你應(yīng)該打印出來(lái)君躺。 或者峭判,您可以將它放在某個(gè)數(shù)字設(shè)備上,然后您可以“顯示”到相機(jī)棕叫。 以下是Vuforia Tracker
數(shù)據(jù)庫(kù)中的圖像:
如您所見(jiàn)林螃,特征點(diǎn)的分布很好。 還有俺泣,這是披薩疗认! 這很方便完残。
Adding Image Targets to the Scene
是時(shí)候做一些魔術(shù)了! 您將使虛擬比薩餅出現(xiàn)在這個(gè)披薩的圖像上横漏。 再次使用層次結(jié)構(gòu)中的Create
菜單谨设,選擇Vuforia -> Image
。
現(xiàn)在你將在場(chǎng)景中擁有一個(gè)Image Target GameObject
绊茧。 在檢查器中查看此目標(biāo)铝宵,您將看到許多組件。 關(guān)鍵的是圖像目標(biāo)行為(Image Target Behavior)
和默認(rèn)可跟蹤事件處理程序(Default Trackable Event Handler)
华畏。 稍后您將深入研究第二個(gè)鹏秋,但是現(xiàn)在,請(qǐng)確保圖像目標(biāo)行為的下拉選項(xiàng)設(shè)置如下:
- 數(shù)據(jù)庫(kù)設(shè)置為
RW_ItsaPizza
- 圖像目標(biāo)設(shè)置為
PizzaClipArt
還記得我之前添加到項(xiàng)目中的文件我說(shuō)你可以忽略嗎亡笑? 你找到了他們侣夷! Vuforia
為您添加了大量樣本圖像目標(biāo)數(shù)據(jù)庫(kù),以便您開(kāi)始開(kāi)發(fā)和使用他們的樣本 - 例如您將使用的樣本仑乌,已包含在材料中百拓。
注意:
Pizza
跟蹤器是數(shù)據(jù)庫(kù)中唯一的圖像目標(biāo);但是晰甚,您可以在一個(gè)數(shù)據(jù)庫(kù)中擁有數(shù)百個(gè)圖像衙传。 此外,您可以在一個(gè)應(yīng)用程序中擁有多個(gè)數(shù)據(jù)庫(kù)厕九。
現(xiàn)在您已經(jīng)在場(chǎng)景中設(shè)置了AR Camera
和Image Tracker
蓖捶,您可以獲得使增強(qiáng)現(xiàn)實(shí)工作所需的一切! 按編輯器中的Play
按鈕扁远,將打印的圖像保持到相機(jī)俊鱼。
在某個(gè)地方,有一個(gè)披薩畅买!
1. Attaching Game Objects as Children to the Trackers
披薩有點(diǎn)小并闲,但它跟蹤跟蹤器圖像。 您可能還會(huì)注意到谷羞,如果您將跟蹤圖像帶走帝火,比薩餅就會(huì)漂浮在那里。
這里發(fā)生的是當(dāng)您的網(wǎng)絡(luò)攝像頭可以看到跟蹤器圖像時(shí)湃缎,Vuforia
可以更新場(chǎng)景中AR相機(jī)的位置购公。 如果你想看到這個(gè),你可以設(shè)置你的Unity編輯器雁歌,你可以看到Game
和Scene
視圖宏浩,并在你點(diǎn)擊play
時(shí)選擇了AR Camera
。
那么靠瞎,如何在相機(jī)工作時(shí)讓比薩餅表現(xiàn)出來(lái)比庄?在層次結(jié)構(gòu)中選擇ImageTarget
求妹。您可以看到每個(gè)軸的比例設(shè)置為10。圖像目標(biāo)行為(Image Target Behaviour)
組件控制它佳窑。在高級(jí)部分中制恍,您可以看到Width
參數(shù)設(shè)置為10,這是在將圖像上載到Vuforia Developer
站點(diǎn)時(shí)定義的神凑。
提示:您是否想知道為什么本教程的圖像目標(biāo)的寬度為10净神?如果尺寸不是您應(yīng)用的重要因素,則將尺寸設(shè)置為10可讓相機(jī)更好地跟蹤溉委,同時(shí)在A(yíng)R相機(jī)的默認(rèn)近距離和遠(yuǎn)距離平面之間保持良好的內(nèi)容位置鹃唯。但是,有時(shí)您可能需要在某個(gè)/現(xiàn)實(shí)世界范圍內(nèi)進(jìn)行擴(kuò)充瓣喊。在這種情況下坡慌,您可以將圖像跟蹤器的大小設(shè)置為與將其上載到開(kāi)發(fā)人員門(mén)戶(hù)時(shí)的物理尺寸相匹配。
現(xiàn)在藻三,在層次結(jié)構(gòu)中選擇Pizza GameObject
洪橘。將其拖到ImageTarget
上以使其成為子項(xiàng)。它的規(guī)模將變?yōu)?code>(X:0.1棵帽,Y:0.1熄求,Z:0.1)。將其增加回(X:1逗概,Y:1弟晚,Z:1)
并在Y軸上將其位置微調(diào)至0.01
。這使得Pizza
非常適合ImageTarget
仗谆。
再次點(diǎn)擊Play
指巡,你會(huì)發(fā)現(xiàn)披薩很適合圖像淑履,但如果隱藏圖像隶垮,它也會(huì)消失。
Exploring the DefaultTrackableEventHandler
此行為來(lái)自ImageTarget
上的DefaultTrackableEventHandler
秘噪。 打開(kāi)腳本并查看它狸吞。
該腳本已經(jīng)得到很好的評(píng)論,但請(qǐng)注意以下幾點(diǎn):
-
Start
函數(shù)將此腳本注冊(cè)為TrackableBehaviour
的事件處理程序(在本例中為ImageTargetBehaviour
)指煎。 -
OnDestroy
刪除該引用蹋偏。 -
OnTrackableStateChanged
是關(guān)鍵函數(shù)。 這里的代碼規(guī)定了跟蹤狀態(tài)變化時(shí)應(yīng)該做什么至壤。 - 從
OnTrackableStateChanged
調(diào)用OnTrackingFound
和OnTrackingLost
威始。 在DefaultTrackableEventHandler
中,它們切換任何子對(duì)象上的Renderer
像街,Collider
和Canvas
組件黎棠。
當(dāng)相機(jī)檢測(cè)到跟蹤圖像時(shí)晋渺,不僅僅是移動(dòng)AR相機(jī)了; 它還告訴Pizza GameObject
打開(kāi)所有Renderer
組件,當(dāng)圖像離開(kāi)相機(jī)時(shí)脓斩,它會(huì)告訴它再次關(guān)閉它們木西。
Making Your own Tracking Actions
是時(shí)候?qū)@些信息做點(diǎn)什么了!
從ImageTarget
中刪除DefaultTrackableEventHandler
組件随静。 然后八千,添加您在Scripts
文件夾中找到的PizzaTrackableEventHandler
。 接下來(lái)燎猛,打開(kāi)PizzaTrackableEventHandler
恋捆。 這是DefaultTrackableEventHandler
的克隆,但OnTrackingFound
和OnTrackingLost
中的代碼已被刪除 - 由您來(lái)解決這個(gè)問(wèn)題扛门!
Renderer
組件的打開(kāi)和關(guān)閉幾乎在每個(gè)AR應(yīng)用程序中都有意義鸠信,因此請(qǐng)重新添加該代碼。如果卡住论寨,可以從DefaultTrackableEventHandler
復(fù)制它或在下面的擾流器塊中找到它星立。
protected virtual void OnTrackingFound()
{
var rendererComponents = GetComponentsInChildren<Renderer>(true);
// Enable rendering:
foreach (var component in rendererComponents)
{
component.enabled = true;
}
}
protected virtual void OnTrackingLost()
{
var rendererComponents = GetComponentsInChildren<Renderer>(true);
// Enable rendering:
foreach (var component in rendererComponents)
{
component.enabled = false;
}
}
你準(zhǔn)備把這個(gè)游戲變成一個(gè)增強(qiáng)現(xiàn)實(shí)游戲!
查看用戶(hù)界面并找到玩家需要點(diǎn)擊以完成比薩餅的按鈕葬凳。
你可以看到當(dāng)玩家點(diǎn)擊按鈕GameManager.CompleteOrder()
時(shí)會(huì)調(diào)用一個(gè)事件绰垂。 您不必讓玩家點(diǎn)按一個(gè)按鈕,而是讓他們必須“披上”比薩餅(將跟蹤器移出視野)才能完成訂單火焰。
在PizzaTrackableEventHandler
的開(kāi)頭劲装,添加一個(gè)UnityEvent
,在Image
失去跟蹤時(shí)調(diào)用昌简。
using Vuforia;
using UnityEngine;
using UnityEngine.Events;
public class PizzaTrackableEventHandler : MonoBehaviour, ITrackableEventHandler
{
public UnityEvent OnTrackingLostEvent;
...
現(xiàn)在占业,在OnTrackingLost
方法中調(diào)用此事件:
protected virtual void OnTrackingLost()
{
var rendererComponents = GetComponentsInChildren<Renderer>(true);
// Enable rendering:
foreach (var component in rendererComponents)
{
component.enabled = false;
}
//Trigger our event
OnTrackingLostEvent.Invoke();
}
這使得PizzaTrackableEventHandler
變得靈活,因?yàn)楝F(xiàn)在您可以設(shè)置在圖像失去跟蹤時(shí)您想要執(zhí)行的任何操作纯赎。 保存PizzaTrackableEventHandler
谦疾,返回Unity Editor
并等待它編譯。 一旦有犬金,將設(shè)置GameManager.CompleteOrder()
在披薩跟蹤器圖像失去跟蹤時(shí)調(diào)用念恍。 最后,關(guān)閉或刪除UI中的CompleteOrderButton
晚顷。
保存場(chǎng)景峰伙,點(diǎn)擊Play
,并提供一些披薩该默!
有關(guān)使用Unity中的Vuforia
進(jìn)行開(kāi)發(fā)的更多信息瞳氓,您可以查看 Vuforia Developer Library或Unity manual。
不要忘記在Vuforia portal中為自己設(shè)置開(kāi)發(fā)人員帳戶(hù)栓袖。 為什么不嘗試上傳幾個(gè)不同的圖像跟蹤器來(lái)查看每個(gè)跟蹤器的效果如何匣摘?
有關(guān)高級(jí)主題锅锨,請(qǐng)查看virtual buttons。Vuforia
網(wǎng)站上有一些示例材料可以幫助您入門(mén)恋沃。 看看你是否可以制作虛擬按鈕來(lái)取代披薩游戲中的UI必搞。
后記
本篇主要講述了如何使用Vuforia制作AR游戲,感興趣的給個(gè)贊或者關(guān)注~~~