반응형

안녕하세요 ~ 또 월요일이 시작됐네요 ㅠ 그나마 기온은 내려가서 살만하긴 해졌는데 여전히 에어컨을 열일하고 있네요 ㅋㅋㅋ


오늘은 카메라를 기준으로 보이는 시점에 있는 정중앙을 알아내는 방법을 써보려고 합니다 ! 일반적인 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 장르에서 나름 중요하다고 하면 중요한 화면 중앙을 알아내는 방법을 올려봤습니다 ! 물론 단순하게 스크립트를 카메라에 넣어버리거나 커서를 잠구고 마우스포지션 값을 받아오면 똑같이 정중앙이지만 그렇지 않은 경우를 위해 올려봤습니다 ~

조금이나마 도움이 되셨기를 바랍니다 !



반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기