코딩 공부/Unity C#

마우스 위치 처리 & 클램핑(Clamping)

recordmastd 2024. 6. 24. 17:28

- 프리팹에서 가져온 게임 오브젝트(인스턴스)에 스크립트를 붙이면  인스턴스에만 스크립트가 추가되어 있다.

해당 인스턴스의 인스펙터 창

- 프리팹에도 스크립트를 추가하기 위해선 'Apply All'을 클릭해야 한다.

- 또는 스크립트를 처음부터 프리팹으로 드래그하여 추가하면 더 간단하게 할 수 있다.

 

마우스의 위치는 어떻게 알 수 있을까?

public Vector3 Input.mousePosition
: 현재 마우스 위치를 픽셀 좌표로 반환한다

 

마우스 위치를 가져온 후 월드 좌표로 변환, 마우스 위치로 오브젝트 움직이기

        // 마우스 위치 가져오기
        Vector3 position = Input.mousePosition;

        // z 축 설정: 카메라에서 얼마나 떨어져 있는지
        position.z = -Camera.main.transform.position.z;

        // 화면 좌표를 월드 좌표로 변환
        Vector3 worldPosition = Camera.main.ScreenToWorldPoint(position);
        
        // 캐릭터를 움직인다
        transform.position = position;

>>> 이렇게 작성하면 오브젝트가 커서에 붙은 것처럼 움직인다

(하지만 오브젝트가 화면을 벗어남)


클램핑(Clamping)이란?

: 주어진 값이 특정 범위 내에 있도록 제한하는 것 '

 

 

- MonoBehaviour를 상속하지 않는 클래스들은 일반적으로 게임 오브젝트에 직접적으로 종속되지 않고, 독립적인 논리 또는 데이터를 처리하는 역할을 수행한다

- 단순한 데이터를 처리하는 클래스는 MonoBehavior가 필요하지 않다

해상도 설정

- 해상도의 크기를 변동시키지 않기 위해 위와 같은 코드를 설정함

Initializer 클래스

initialize 메소드

- ScreenUtils에서 선언한 변수의 값을 초기화 설정하는 클래스

- awake는 start가 시작되기 전에 호출된다

(게임 시작 전에 해상도 설정이 더 중요하기 때문에 해상도 설정 함수가 가장 먼저 호출된다)

Charater 클래스

캐릭터(오브젝트)가 왼쪽 화면밖으로 떠났다는 사실을 알아내기 위해선?

- 캐릭터의 현재 trasnform.position.X를 가져와서 콜라이더 너비의 절반을 뺀다

- ClampInScreen()은 캐릭터가 화면에 고정되도록 하는 메서드

 

ClampInScreen() class

 

transform.position은 설정할 수 있지만 transform.position의 속성은 설정할 수 없다

= transform.position.X 혹은 transform.position.Y의 값은 직접 설정 불가능

참고용