2016. 12. 6. 17:06ㆍ프로그래밍/Unity
뷰포리아 API에서 제공하는 오토포커싱 기능은 사용코드 자체는 매우 간결하다
네임스페이스 using Vuforia; 선언이후하고
CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
코드만 호출하면 된다.
또 해당 Set함수는 성공여부를 bool값으로 반환하기때문에 디버그 코드로 짜면 실패여부도 확인할수있다.
(해당 예시코드를 뷰포리아 개발자 센터에서 기본제공하고 있다)
그런데 막상 저렇게 개발하다보면 막히는게 있는법...
안드로이드의 경우 디바이스에서 카메라 오토포커싱 사용을 하기위해 매니페스트 권한부여가 필요하다.
<uses-permission android:name="android.permission.CAMERA" />
: 카메라를 사용할 것이다
<uses-feature android:name="android.hardware.camera" />
:카메라의 특수기능을 사용할 것이다
<uses-feature android:name="android.hardware.camera.autofocus" />
:카메라 오토포커싱을 사용할 것이다
위의 권한 이외에도 상황에 맞게 다양한 권한 설정을 해줘야한다는 것을 안드로이드 개발자들은 이미 알고 있을것이다.
다른사람들이 정상작동되는 코드를 가지고 개발하는데 나만 안되는 것 같다면 아마도 이런 문제일 경우가 많다.
본인도 위의 사항으로 개발하다가 이번에는 또한가지 발견해서 겸사겸사 정리한다.
뷰포리아의 경우 씬에 카메라와 이미지 타겟을 가져다놓음으로 간단한 증강현실을 구현할 수 있다.
카메라에 특별한 설정을 하지않아도 해당씬에 들어가면 카메라가 자동으로 켜지는것을 쌤플링 코드를 따라해봤다면 알 것이다.
편리하지만 여기에서 생긴 문제인것 같은데,
void Start() 함수안에서 오토포커싱 기능을 추가하여 사용할때,
해당씬에 들어가면 바로 오토포커싱 적용이 안되는 경우가 발생했다.
오토포커싱모드 기능을 만들어서 씬이 로드된후에 버튼을 눌러 호출해보니
void AutoFocusOn()
{
CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
}
그때서야 오토포커스가 정상작동되었다.
내가 만든 스크립트와 뷰포리아 코드와 순서가 꼬일 경우가 생기나보다
스타트 함수가 불린 후에 뷰포리아의 초기화기능이 동작하여 생긴것이라고 짐작하고
bool bStartEndInit = false;
void Update()
{
if(!bStartEndInit)
{
bStartEndInit = true;
AutoFocusOn()
}
}
업데이트에서 불러보니 씬에 진입하고 바로 오토포커스 기능이 잘 동작했다.
업데이트 함수가 모든 스크립트의 Start함수가 호출된 이후에 불려진다는 점을 이용한 꼼수지만,
아무튼 해당문제에 대한 짐작이 거의 적중했음을 결과를 통해 알 수 있다.
해당 꼼수로 문제를 해결해도 좋지만, 문제점이 특정되었으니 위의 방법이외에도 여러분이 다른방법으로 해결책을 구현할 수 있을 것이다.
'프로그래밍 > Unity' 카테고리의 다른 글
유니티 렌더링 뎊스 : UI 사이에 오브젝트 그리기 (5) | 2017.05.18 |
---|---|
UI라벨 에러.. (0) | 2017.02.02 |
뷰포리아 카메라 전방 후방 카메라 전환 (0) | 2016.11.25 |
Unity Build 에러들 (0) | 2016.11.24 |
유니티 플랫폼별 경로 정리 (0) | 2016.07.19 |