안녕하세요 ~ 또 월요일이 시작됐네요 ㅠ 그나마 기온은 내려가서 살만하긴 해졌는데 여전히 에어컨을 열일하고 있네요 ㅋㅋㅋ
오늘은 카메라를 기준으로 보이는 시점에 있는 정중앙을 알아내는 방법을 써보려고 합니다 ! 일반적인 FPS장르에서의 조준점은 정중앙이죠 ! 그런데 단순히 Canvas를 기준으로 만들어놓다보면 해상도나 정렬 상태에 따라 달라지게 되는 문제가 간혹 생기죠 (나만 그랬나) 그래서 아예 보이는 화면에 중앙을 알아내는 방법을 포스팅 하겠습니다 !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScreenPixel : MonoBehaviour { private Vector3 ScreenCenter; // Use this for initialization void Start () { ScreenCenter = new Vector3(Camera.main.pixelWidth / 2, Camera.main.pixelHeight / 2); } // Update is called once per frame void Update () { Ray ray = Camera.main.ScreenPointToRay(ScreenCenter); Debug.DrawRay(transform.position, transform.forward * 10f, Color.red); } } | cs |
저는 메인카메라를 기준으로 보이고 있는 화면에 정중앙을 변수에 저장하도록 할게요 !
ScreenCenter = new Vector3(Camera.main.pixelWidth / 2, Camera.main.pixelHeight / 2);
이 부분인데 아주 간단해보이죠? 'ScreenCenter' 라는 3차원 Vector값에 Camera.main (=메인 카메라)의 pixelWidth(가로픽셀)과 pixelHeight(세로픽셀)을 반으로 나눈 값을 넣습니다.
ps// Debug.DrawRay(transform.position, transform.forward * 10f, Color.red); 이 부분은 Scene View에서 가상의 Ray를 그려서 확인하려고 넣어둔 코드 입니다. 구현할 때는 굳이 넣지 않으셔도 기능에는 문제가 없습니다!
현재 제 프로젝트에 게임뷰에 있는 카메라의 시점은 이 상태입니다. 만약 제 프로젝트 상태로 정중앙이라면 게임 뷰에 보이고 있는 현 시점에서의 가운데겠죠?
만약 1인칭 카메라 (FPS) 상태라고 가정을 한다면
(출처 : https://www.google.co.kr/url?sa=i&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwjY1ODLuvvcAhXFXrwKHfjrAnAQjRx6BAgBEAU&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DLfQg0Let0nY&psig=AOvVaw2e35gsMnOb_VOPloZDaWSE&ust=1534848551991075)
저런식으로 화면에 중앙을 알아낼 수 있습니다 ~
오늘은 FPS 장르에서 나름 중요하다고 하면 중요한 화면 중앙을 알아내는 방법을 올려봤습니다 ! 물론 단순하게 스크립트를 카메라에 넣어버리거나 커서를 잠구고 마우스포지션 값을 받아오면 똑같이 정중앙이지만 그렇지 않은 경우를 위해 올려봤습니다 ~
조금이나마 도움이 되셨기를 바랍니다 !
'Unity (C#) > Old' 카테고리의 다른 글
유니티 Nav Mesh Agent 이용해서 AI 만들기 (플레이어 따라다니는 적) (3) | 2018.10.02 |
---|---|
유니티 스킬 쿨타임 표시 구현하기 (3) | 2018.08.26 |
유니티 오브젝트 복제하기 (Instantiate) (0) | 2018.08.17 |
유니티 마우스 이벤트 알아보기 (2) (0) | 2018.08.15 |
유니티 마우스 이벤트 알아보기 (1) (0) | 2018.08.14 |
최근댓글