버그 해결을 위한 모든 질문을 던져
0 votes
239 views


카메라 안에 이미지가 하나 있는. 위 한자와 같은 뷰를 그리려고 합니다.

그런데 이미지 크기가 가변이라서 씬이 초기화 될 떄 카메라의 z좌표를 결정해야 할것 같습니다.

이미지 크기가 다르더라도 최대한 꽉 차보이거나 혹은 약간의 margin이 있도록 화면을 구성하고 싶은데요

얼마나 z를 뒤로 빼야 하는지 알려면 어떻게 진행하면 좋을까요?
asked (282 point) , 239 views
https://blog.naver.com/bluekms21/222321967719

제가 찾은 답은 위와 같습니다.

화면과 이미지의 가로 세로 비율을 고려해서 화면에 꽉 차게되는 카메라 거리 구하는 공식에 관한 코드를 적었습니다.

도움이 되셨다면 블로그 포스팅의 광고 클릭한번 부탁드립니다 <(_ _)> ㅎ

4 answers

+3 votes
우수 답변

이미 위에 너무나 좋은 답변들이 많이 달렸지만, 

유니티에서 기본으로 제공 하는 것을 이용하는 방법에 대해 제안 해봅니다.

 

1. `Canvas`의 Render Mode: `Screen Space - Camera`를 이용 하는 방법

`UI > Canvas` 컴포넌트를 사용하면 2D 리소스를 쉽게 배치할 수 있습니다.

`Canvas`의 `Render Mode`를 `Screen Space - Camera`는 지정된 카메라와 거리를 기준으로 캔버스를 화면에 맞춰 적절하게 조절합니다.

같이 추가되는 `Canvas Scaler`의 `UI Scale Mode: Scale With Screen Size` 이용하면 화면 비율에 따른 캔버스 배율을 조정할 수 있습니다.

`Apsect Fitter` 컴포넌트를 사용하면 Image 등 캔버스 하위 오브젝트의 비율과 자동 조절 모드를 지정하실 수 있습니다.

캔버스 - Unity 매뉴얼 (unity3d.com)

 

2. `Camera.ScreenToWorldPoint` 함수를 이용하는 방법

`ScreenToWorldPoint`(픽셀 해상도 기준) 또는 `ViewportToWorldPoint`(정규화된 0~1 기준) 함수를 사용하면 화면 좌표계에서 지정한 z값의 월드 좌표를 구하실 수 있습니다.

화면에서 배치하고 싶은 좌표를 변환해서 사용하면 값을 계산할 수 있을 것 같습니다. 

Unity - Scripting API: Camera.ScreenToWorldPoint (unity3d.com)

answered (41 point)
선택됨
0 votes
일단 카메라를 이미지의 중앙으로 위치시키는건 어렵지 않았고,

좌상단의 Vector3를 알아와서

카메라의 뷰프러스텀과 위의 점이 '안에 들어오는가'를 검사하는것으로 진행하려고 하는데...

=_= 카메라를 점점 뒤로 밀어가면서 for문으로 체크할 생각을 했거든요. 이건 좀 아닌가 싶어서 여쭤봅니다 ~_~ㅎ
answered (282 point)
그냥, 쉽게 후루크적인 방법으로,

 

일단,

100x100 이미지 일때, 카메라 거리 100 이 딱 맞는다고 하면,

이것을 기준으로,

200x200 이미지일때는 이미지 스케일만큼

카메라 거리에 곱해주면,

100 * 2

뭐, 이런식으로 말이죠,

 

어디까지나 후르크적이지만,

일단 저라면, 쉽게 이렇게 테스트 해볼것 같네요,

직접 해보지는 않아서

비율이 맞지는 않겠지만,

카메라 fov 따라 비율수치는 조절해 주어야 할듯 합니다

 

아아, 기준은

이미지 가로 사이즈( width ) 를 기준으로 잡아야할듯 하네요,
음? 답글로 달아야 좋아요를 눌러드릴텐데..ㅎ

이것도 좋은방법인것같네요! 답변 감사합니다~
+1 vote
이미지의 가로던 세로던 길이를 알면 카메라의 fov값은 알테니 삼각함수로 쉽게 구해질 것 같습니다.
answered (132 point)
아 그렇군요! 답변 감사합니다 ㅎ
0 votes
근사치로 카메라로 수직 거리 값 * fov Tangent * 2 한 거리를 물체의 최대 좌우 값에 대응시키면 되지 않을가요?
answered (4 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

481 질문
636 answers
613 댓글
87,236 users