教程目錄
實現功能:掃描目標素材,出現3D模型,執行他的小動作。
涉及知識點:Easy AR和Unity3D結合。如何導入3D素材到Unity3D?如何給模型貼圖?如何給模型增加簡單的動畫?
1. Easy AR準備工作
1.1添加key具體如下
官網註冊:https://www.easyar.cn/view/login.html
1.2 下載Easy AR SDK
下載鏈接:https://www.easyar.cn/view/download.html
注:此處我下載的圖上框起來的,下載好後,解壓。也可下載圖上的Samples,通過官方例子學習是不錯的方式。
附:運行EasyAR的"HelloAR"Sample
2. 創建Project + Import Easy AR SDK
1.創建名爲HelloAR的project
2. Import SDK
3. 結合Easy AR進行開發
1)找到"EasyAR_Startup"並將其拖入"Hierarchy"
注:一定要注意上述保存的路徑爲
D:\0_NEW_software\Unity3D_5.6.7\projects\HelloAR\Assets\Scenes(合理的管理項目)
2)將Easy AR的key填寫如下:
3)添加ImageTarget作爲我們要識別的對象
素材如下:
創建一個文件夾名爲StreamingAssets,並將素材導入進去(通俗的說就是將素材放在StreamingAssets文件夾下)
回到Unity3D發現已經導入素材,如下:
爲Image Target新建腳本文件如下:
右鍵→Edit Scripts,將如下代碼複製進去
using UnityEngine;
using EasyAR;
namespace Sample
{
public class NewBehaviourScript : ImageTargetBehaviour
{
protected override void Awake()
{
base.Awake();
TargetFound += OnTargetFound;
TargetLost += OnTargetLost;
TargetLoad += OnTargetLoad;
TargetUnload += OnTargetUnload;
}
void OnTargetFound(TargetAbstractBehaviour behaviour)
{
Debug.Log("Found: " + Target.Id);
}
void OnTargetLost(TargetAbstractBehaviour behaviour)
{
Debug.Log("Lost: " + Target.Id);
}
void OnTargetLoad(ImageTargetBaseBehaviour behaviour, ImageTrackerBaseBehaviour tracker, bool status)
{
Debug.Log("Load target (" + status + "): " + Target.Id + " (" + Target.Name + ") " + " -> " + tracker);
}
void OnTargetUnload(ImageTargetBaseBehaviour behaviour, ImageTrackerBaseBehaviour tracker, bool status)
{
Debug.Log("Unload target (" + status + "): " + Target.Id + " (" + Target.Name + ") " + " -> " + tracker);
}
}
}
4. 導入3D人物
導入3D人物,給3D人物加動畫。
1)導入素材及一些基本設置
選了素材中的一個:attack1
預製體拖拽到場景中後,系統會自動生成一個Animator組件
創建一個Controller來控制動畫,在**工程(Project)**裏創建一個動畫控制器,Animator Controller,將這個控制器拖拽到Animator組件上。
就生成一個橘黃色的New State的框框,播放時人物就會使New State狀態。
注:單純把Take 001的動畫剪輯拖拽到窗口中是灰色的,要設定一個過渡才能讓Take 001的動畫播放出來,右鍵點擊New State,在選項中選擇Make Transition會出現一個箭頭,選中Take 001狀態即可。我們還想讓Take 001過渡到New State狀態,所以再連接一根到New State的箭頭。
這裏右方設置面板有一個Has ExitTime選項,勾選的意思是當前一個動畫播放完,再播放下一個動畫,因爲我們希望攻擊時瞬發的,所以不勾選。(後面爲了讓他一直動就勾選了)
5.給模型貼圖
從上面的動畫圖可以看到模型還是灰色的,所以接下來我們給模型貼圖。
將模型拖到ImageTarget下,作爲其子物體,方可掃描素材出現模型。
6.爲模型添加縮放大小手勢功能
代碼如下:實現雙手縮放
using UnityEngine;
using System.Collections;
public class Gesture : MonoBehaviour {
private Touch oldTouch1; //上次觸摸點1(手指1)
private Touch oldTouch2; //上次觸摸點2(手指2)
void Update()
{
//沒有觸摸,就是觸摸點爲0
if (Input.touchCount <= 0)
{
return;
}
//多點觸摸, 放大縮小
Touch newTouch1 = Input.GetTouch(0);
Touch newTouch2 = Input.GetTouch(1);
//第2點剛開始接觸屏幕, 只記錄,不做處理
if (newTouch2.phase == TouchPhase.Began)
{
oldTouch2 = newTouch2;
oldTouch1 = newTouch1;
return;
}
//計算老的兩點距離和新的兩點間距離,變大要放大模型,變小要縮放模型
float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
//兩個距離之差,爲正表示放大手勢, 爲負表示縮小手勢
float offset = newDistance - oldDistance;
//放大因子, 一個像素按 0.01倍來算(100可調整)
float scaleFactor = offset / 100f;
Vector3 localScale = transform.localScale;
Vector3 scale = new Vector3(localScale.x + scaleFactor,
localScale.y + scaleFactor,
localScale.z + scaleFactor);
//在什麼情況下進行縮放
if (scale.x >= 0.05f && scale.y >=0.05f && scale.z >= 0.05f)
{
transform.localScale = scale;
}
//記住最新的觸摸點,下次使用
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
}
}
7.導出.apk文件
然後就可以在手機上安裝運行啦。
注意:導出apk安裝到手機上後,不要在聯網條件下運行軟件,聯網條件下key會失效,具體原因不清楚。
參考鏈接:所有參考鏈接都在這個鏈接裏
總結:寫這篇博客花了三小時左右,雖然都是做過一次的了,但寫出來真的挺慢,比自己做更慢。但希望記錄下來,也提升自己寫博客的“手法”。加油吧!
關於Unity3D中StreamingAssests要了解更多隨便百度一下就好了,以及ImageTarget也是噢。
素材下載鏈接:http://note.youdao.com/noteshare?id=1864860af3240a9d8ea9bd5477a85880&sub=6BD18D9DF1554F60B9937D70363C193E