증강현실(Augmented Reality)/Vuforia 사용하기

V08. 바코드 스캐너(Bardcode Scanner)

danmujicat 2023. 4. 11. 13:50

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로 변경합니다.

background_white.png
0.00MB

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 를 설정합니다.

 

store-scanner-beep-90395.mp3
0.02MB

③  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로 변경합니다.

2D Scanning Reticle.png
0.01MB

실행하기