마우스 위치 처리 & 클램핑(Clamping)
- 프리팹에서 가져온 게임 오브젝트(인스턴스)에 스크립트를 붙이면 인스턴스에만 스크립트가 추가되어 있다.
- 프리팹에도 스크립트를 추가하기 위해선 '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 클래스
- ScreenUtils에서 선언한 변수의 값을 초기화 설정하는 클래스
- awake는 start가 시작되기 전에 호출된다
(게임 시작 전에 해상도 설정이 더 중요하기 때문에 해상도 설정 함수가 가장 먼저 호출된다)
Charater 클래스
캐릭터(오브젝트)가 왼쪽 화면밖으로 떠났다는 사실을 알아내기 위해선?
- 캐릭터의 현재 trasnform.position.X를 가져와서 콜라이더 너비의 절반을 뺀다
- ClampInScreen()은 캐릭터가 화면에 고정되도록 하는 메서드
ClampInScreen() class
transform.position은 설정할 수 있지만 transform.position의 속성은 설정할 수 없다
= transform.position.X 혹은 transform.position.Y의 값은 직접 설정 불가능