V08. 바코드 스캐너(Bardcode Scanner)
1. Vuforia 환경 설정하기
① Unity를 열어 새로운 3D 프로젝트를 생성학고 프로젝트명을 설정합니다.
② Vuforia Engine SDK패키지를 Import합니다. Unity 메인 메뉴에서 Window/Asset Store메뉴를 선택하여 에셋 스토어에
접 속하여 Vuforia Engine을 찾아 다운로드하고, Import Unity Package 창이 나타나면 import 버튼을 클릭하여
유니티내에 임포트합니다.
③ Vuforia 개발을 위한 라이센스를 생성한 프로젝트에 추가해야 합니다.
Unity의 Project 창에서 Assets/Resources 폴더에 있는 VuforiaConguration 를 선택하고 inspector 창에서
[Add Licence]버튼을 클릭하면 Vuforia engine developer potal 웹 페이지로 이동하여 License Manager
웹 페이지에서 생성한 앱 이름 Vuforia를 클릭하면 Vuforia 라이센스 키가 나타납니다.
④ 이 라이센스 키를 복사한 후 Unity로 돌아와서 VuforiaConfiguration의 Inspector 패널에서 App License Key의
입력창에 복사한 라이센스 키를 붙여넣기 합니다.
⑤ VuforiaConfiguration의 Inspector 패널에서 PlayMode Type속성이 Webcam으로 선택되어 있는지 확인합니다.
2. 바코드 인식하기
① GameObject 메뉴에서 Vuforia Engine | ARCamera 메뉴를 선택하여 Hierachy 창에 ARCamera 추가합니다.
- Position(0, 0.25, 0.35)
- Rotation(30,0,0)
② GameObject 메뉴에서 Vuforia Engine | Barcode 메뉴를 선택하여 Hierachy 창에 Barcode 추가합니다.
2.1 바코드 동작과 윤곽선 넣기
① Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Barcode Behaviour 컴포넌트의 Advanced-> Barcode Types 목록에서 QRCODE, DATAMATRIX, AZTEC, PDF417의 체크박스를 해제합니다.
② Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Add Component 버튼을 클릭하여 Barcode Outline Behaviour 컨포넌트를 추가하고 Ountline Thickness 속성값을 10으로 변경합니다.
2.2 UI 만들기
① Hierachy 창에서 GameObject | Create Empty 메뉴를 선택하여 빈 오브젝트를 추가하고 이름을 BarCodeUI로 변경합니다.
② Hierachy 창에서 BarCodeUI 오브젝트 하위에 GameObject | UI | Canvas 메뉴를 선택하여 Canvas를 추가하고 인스펙터 창에서 Canvas Scalar 컴포넌트의 Reference Resolution X, Y를 800, 480으로 설정합니다.
③ Hierachy 창에서 BarCodeUI -> Canvas 하위에 GameObject | UI | Image 메뉴를 선택하여 Image 를 추가하고 이름을 CodeText로 변경합니다.
④ Hierachy 창에서 BarCodeUI -> Canvas -> CodeText 하위에 GameObject | UI | Text 메뉴를 선택하여 Text 를 추가합니다.
⑤ Hierachy 창에서 BarCodeUI -> Canvas 하위에 GameObject | UI | Plane 메뉴를 선택하여 Plane를 추가하고 이름을 1DReticle로 변경합니다.
2.3 바코트 인식하기
① Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Add Component 버튼을 클릭하여 SimpleBarcodeScanncer.cs 스크립트 추가합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class SimpleBarcodeScanner : MonoBehaviour
{
public TMPro.TextMeshProUGUI barcodeAsText;
BarcodeBehaviour mBarcodeBehaviour;
void Start()
{
mBarcodeBehaviour = GetComponent<BarcodeBehaviour>();
}
// Update is called once per frame
void Update()
{
if (mBarcodeBehaviour != null && mBarcodeBehaviour.InstanceData != null)
{
barcodeAsText.text = mBarcodeBehaviour.InstanceData.Text;
}
else
{
barcodeAsText.text = "";
}
}
}
② Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 SimpleBarcodeScanncer 컴포넌트의 Barcode As Text에 하이러키 창에서 BarCodeUI -> Canvas -> CodeText ->Text를 드래그앤드룹하여 설정합니다.
실행하기
2.4 사운드 넣기
① Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Add Component 버튼을 클릭하여 Aaudio Source 컴포넌트를 추가합니다.
② Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Aaudio Source 컴포넌트의 AudioClip 속성에 사운드 store-scanner-beep-90395。mp3 를 설정합니다.
③ Hierachy 창에서 Barcode 선택하고 SimpleBarcodeScanncer.cs 스크립트의 코드를 수정합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class SimpleBarcodeScanner : MonoBehaviour
{
public TMPro.TextMeshProUGUI barcodeAsText;
BarcodeBehaviour mBarcodeBehaviour;
public AudioSource BarcodeSound;
public bool PlaySounds = true;
。。。
void Update()
{
if (mBarcodeBehaviour != null && mBarcodeBehaviour.InstanceData != null)
{
barcodeAsText.text = mBarcodeBehaviour.InstanceData.Text;
if (PlaySounds)
{
BarcodeSound.Play();
}
}
else
{
barcodeAsText.text = "";
PlaySounds = false;
}
}
}
④ Hierachy 창에서 Barcode 선택하고 인스펙터 창에 SimpleBarcodeScanncer 스크립트의 Barcode Sound 속성값에 Hierachy 창에서 Barcode 오브젝트를 드래그앤드롭하여 설정합니다。
2.5 클릭시 바코드 인식하기
① Hierachy 창에서 GameObject | Create Empty 메뉴를 선택하여 빈 오브젝트를 추가하고 이름을 BarcodeScanner로 변경합니다.
② Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Add Component 버튼을 클릭하여 BarcodeReader.cs 스크립트 추가합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class BarcodeReader : MonoBehaviour
{
public TMPro.TextMeshProUGUI barcodeAsText;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray.origin, ray.direction, out RaycastHit hit))
{
barcodeAsText.text = hit.collider.GetComponent<BarcodeBehaviour>().InstanceData.Text;
}
}
}
}
③ Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Add Component 버튼을 클릭하여 BarcodeCollider.cs 스크립트 추가합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class BarcodeCollider : MonoBehaviour
{
BarcodeBehaviour mBarcodeBehaviour;
MeshCollider mMeshCollider;
void Start()
{
mBarcodeBehaviour = GetComponent<BarcodeBehaviour>();
if (mBarcodeBehaviour != null)
{
mBarcodeBehaviour.OnBarcodeOutlineChanged += OnBarcodeOutlineChanged;
}
}
void OnBarcodeOutlineChanged(Vector3[] vertices)
{
UpdateMeshCollider(vertices);
}
void UpdateMeshCollider(Vector3[] vertices)
{
if (!mMeshCollider)
{
mMeshCollider = gameObject.AddComponent<MeshCollider>();
mMeshCollider.cookingOptions = MeshColliderCookingOptions.None;
}
Mesh mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = new int[] { 0, 1, 2, 0, 2, 3 }; // Creates 2 triangles
mMeshCollider.sharedMesh = mesh;
}
}
실행하기
3. QR코드 인식하기
2。바코드인식하기와 동일하게 작성하고 아래의 내용만 변경합니다。
2.1 바코트 인식하기 변경
① Hierachy 창에서 Barcode 선택하고 인스펙터 창에서 Barcode Behaviour 컴포넌트의 Advanced-> Barcode Types 목록에서 QRCODE, DATAMATRIX, AZTEC, PDF417만 체크박스를 선택하고 모두 해제합니다.
2.2 UI 만들기
⑤ Hierachy 창에서 BarCodeUI -> Canvas 하위에 GameObject | UI | Plane 메뉴를 선택하여 Plane를 추가하고 이름을 2DReticle로 변경합니다.
실행하기