상세 컨텐츠

본문 제목

유니티 AR Foundation 오브젝트 이동 AR Foundation Object move

프로그래밍/유니티

by 개발자입니다 2020. 10. 24. 16:39

본문

728x90
반응형

안녕하세요 오늘은 저번 시간에 이어 AR Foundation을 이용하여 객체를 생성하고 드래그를 통해 움직이는 방법에 대하여 포스팅 하겠습니다.

 

먼저 객체 생성하는 방법은 아래의 링크를 통해 확인해주세요.

 

https://simpleneed.tistory.com/50

 

AR Foundation을 통해 객체를 생성했다면 다음은 객체를 터치하면 인식을 하고, 드래그를 통하여 움직이면 해결입니다.

 

 

 

 

 

 

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.XR.ARFoundation;

using UnityEngine.XR.ARSubsystems;

 

public class TouchManager : MonoBehaviour

{

    //생성할 객체 

    private GameObject placeObject;

    private ARRaycastManager raycastMgr; 

    private List<ARRaycastHit> hits = new List<ARRaycastHit>();

 

    private bool Touched = false;

    private GameObject SelectedObj;

    [SerializeField] private Camera arCamera;

 

    void Start() {

        // 생성할 큐브를 할당

        placeObject = GameObject.CreatePrimitive(PrimitiveType.Cube);

        // 큐브의 크기를 설정 

        placeObject.transform.localScale = Vector3.one * 0.05f;

      // AR Raycast Manager 추출 

        raycastMgr = GetComponent<ARRaycastManager>();

}

 

 

 

 void Update() { 

        if (Input.touchCount == 0) return; 

        Touch touch = Input.GetTouch(0); 

        

        //터치 시작시

        if (touch.phase == TouchPhase.Began) {

 

            Ray ray;

            RaycastHit hitobj;

 

            ray = arCamera.ScreenPointToRay(touch.position);

            

            //Ray를 통한 오브젝트 인식

            if(Physics.Raycast(ray, out hitobj))

            {

                //터치한 곳에 오브젝트 이름이 Cube를 포함하면

                if (hitobj.collider.name.Contains("Cube"))

                {

                    //그 오브젝트를 SelectObj에 놓는다 //터치하고 있는다

                    SelectedObj = hitobj.collider.gameObject;

                    Touched = true;

                }

                //아니면 오브젝트 선택 아닐 시 생성

                else

                {

                    if (raycastMgr.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))

                    {

                        Instantiate(placeObject, hits[0].pose.position, hits[0].pose.rotation);

                    }

                }

            }

        } 

        //터치가 끝나면 터치 끝.

        if(touch.phase == TouchPhase.Ended)

        {

            Touched = false;

        }

        

        if (raycastMgr.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))

        {

            //터치 시 해당 오브젝트 위치 초기화

            if (Touched)

            {

                SelectedObj.transform.position = hits[0].pose.position;

            }

        }

    }

 

}

 

 

스크립트 이름은 TouchManager로 이전 포스팅 오브젝트 생성 스크립트를 수정하여 빌드합니다.

 

 

 

728x90
반응형

관련글 더보기

댓글 영역