사실, ios도 되는 코드라고 본다. 단, 맥북이 없는 관계로 ios 빌드를 해서 돌려볼 수가 없다.
처음에는 OpenCV 에서 제공하는 기능이라 생각했지만, 유니티에서 기본으로 제공하는 코드였고,
OpenCV도 그냥 유니티 코드에서 카메라 이미지를 받아와 처리하는것이었다.
그런줄 모르고 여러 설정값을 바꿔가면서 해봤는데...결국 돌고 돌아 간결하게 코드가 완료됬다.
정말 금방 구현하능한 코드를 멀리 돌고 돌아 시간 소비가 좀 되었다.
1. 요약
- WebCamTexture가 카메라를 동작하는 클래스이다.
- WebCamTexture 설정을 한 뒤, Play 하고 update 문에서 해당 텍스쳐를 화면에 보여준다.
2. 카메라 구동
- 구동할 카메라를 선택하고, 카메라의 width, height 값을 설정한다.
- requestedHeight와 requestedWidth를 설정하지 않을시, 640 * 480으로 고정된다.
- 따라서 각 속성에 Screen.width, height 값을 주었다.
- FilterMode는 화면을 부드럽게 동작하기 위함이고, Trilinear를 주었다.
- Start 함수에서 이 함수를 호출한다.
* 사실 내가 보유한 기기에는 카메라가 총 3개가 있다. 보통은 0번이 전면인데 내 기기는 0번이 후면이다.
상황에 맞게 카메라를 고를 수 있도록 코드를 짜야 하나, 테스트 용도이므로 강제로 0번을 주었다.
private void SetCamera()
{
string cameraName = "";
if (WebCamTexture.devices.Length > 0)
cameraName = WebCamTexture.devices[0].name;
camTexture = new WebCamTexture(cameraName);
camTexture.requestedHeight = Screen.height;
camTexture.requestedWidth = Screen.width;
camTexture.filterMode = FilterMode.Trilinear;
camTexture.Play();
}
3. 카메라 이미지 화면에 표시
- 조금이라도 과부하를 줄이기 위해, WebCamTexture의 이미지가 update 되지 않았을때만 업데이트를 한다
- WebCamTexture 를 이용하 카메라의 이미지를 받아왔을때, 결과물이 회전 되어 있을 수 있다.
따라서 화면방향에 맞게 이미지 회전을 해주어야 한다.
void Update()
{
if (camTexture == null || camTexture.isPlaying == false)
return;
if (camTexture.didUpdateThisFrame == false)
return;
rawImage.texture = camTexture;
rawImage.GetComponent<RectTransform>().localEulerAngles = new Vector3(0, 0, -camTexture.videoRotationAngle);
rawImage.GetComponent<RectTransform>().sizeDelta = new Vector2(camTexture.width, camTexture.height);
}
'Unity' 카테고리의 다른 글
enum 에서 문자열을 통한 조회 방법 (0) | 2023.10.18 |
---|---|
GLB 파일 임포트 (0) | 2023.10.18 |
(VR) 윈도우 VR 을 위한 Universal Window 빌드방법 (0) | 2022.03.25 |
유니티 테스트 러너 사용방법 (0) | 2022.03.25 |
스레드 사용시 메인스레드 관련 오류발생 수정 (WPF의 dispatcher) (0) | 2022.03.24 |