사용자가 원하는 위도, 경도 주변에 있는지 확인
void DetectPlace()
{
//원하는 위치 수 만큼 반복
foreach (LatLong latLong in latLongs)
{
//현재 위치와 원하는 위치의 거리가 범위 내에 들어가지 않으면 isInPlace = false, 반복문 continue
if (Vector3.Magnitude(currentLocation - GPSEncoder.GPSToUCS(latLong.lat, latLong.lon)) > distance)
{
isInPlace = false;
continue;
}
//범위 내에 들어간다면 isInPlace = true, 위치 이름을 place에 저장
isInPlace = true;
place = latLong.name;
return;
}
}
이벤트 프리팹을 생성하거나 삭제
위치 범위에서 벗어나고 이벤트 프리팹이 생성 되었다면, 이벤트 프리팹을 삭제하는 함수 DestroyEventPre()
위치 범위 내에 있고 이벤트 프리팹이 생성되지 않았다면, 바닥을 감지한 뒤 이벤트 프리팹을 생성하는 함수 DetectGround()
void Update()
{
if (!isInPlace)
{
if (isGen)
{
DestroyEventPre();
}
return;
}
if (!isGen)
{
DetectGround();
}
}
스마트폰 중앙 지점에서 Ray를 발사할 때 Plane타입의 물체가 존재 한다면 EventPrefab 활성화 후 EventPrefab의 위치를 Plane으로 설정
오브젝트 활성화 정보를 저장하는 isGen을 true로 설정
void DetectGround()
{
//스마트폰 스크린의 Center를 찾음
Vector2 centerPoint = new Vector2(Screen.width * 0.5f, Screen.height * 0.5f);
//Ray에 부딪힌 대상들의 정보를 저장할 리스트 생성
List<ARRaycastHit> hitInfos = new List<ARRaycastHit>();
//스크린 중앙지점으로 부터 Ray를 발사 했을 때, Plane 타입의 물체가 존재한다면,
if (arRayMan.Raycast(centerPoint, hitInfos, TrackableType.Planes))
{
//표식 오브젝트 활성화
eventPre.SetActive(true);
isGen = true;
//표식 오브젝트의 위치와 회전값 업데이트
eventPre.transform.position = hitInfos[0].pose.position;
eventPre.transform.rotation = hitInfos[0].pose.rotation;
}
}
터치시 터치한 화면 위치에서 Ray를 발사할 때, smallEvent를 포함한 오브젝트가 있다면 text와 image를 출력할 UI Canvas 활성화
해당 위치의 text와 image를 보여주는 smallEventManager 스크립트의 함수 사용
void Update()
{
if (Input.touchCount == 0) return; //터치 횟수가 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)) //맞은 오브젝트가 있으면 hitobj에 저장하고 if들어감
{
//터치한 곳에 오브젝트 이름이 smallEvent를 포함하면
if (hitobj.collider.name.Contains("smallEvent"))
{
//현재 위치의 document id 들고옴
GetComponent<PlaceInfo>().documentId = GameObject.Find("AR Session Origin").GetComponent<AREventGen>().place;
//UI띄움
if(!smallEventManager.isView) // UI가 비활성 상태면 띄우기
smallEventManager.View(GameObject.Find("smallEvent"));
else // 활성상태면 index증가해서 다음 text띄우기
smallEventManager.TextView(GetComponent<PlaceInfo>().documentId);
}
}
}
}
혹시 전체 코드를 볼 수 있을까요... 어떤식으로 연결되어 있는지 이해가 안되서.. 도와주세요!