다시 한번 테스트를 해 보면.... 잘 된다. 카메라는 화면 기준으로 앞(z축) 방향으로 이동한다.
이제, 카메라가 이동 할 위치를 제한해 보자. 보통의 방법은
private Vector3 pos; // 위치 제한 계산/판단을 위한 임시 변수
private float maxXPosition; // x축 최대값
private float minXPosition; // x축 최소값
pos = transform.position; // 현재 position값을 입력
if(pos.x >= maxXPosition)
pos.x = maxXPosition; // x축 최대값 이상이면 x축 최대값으로 조정
if(pos.x <= minXPosition)
pos.x = minXPosition; // x축 최소값 이하이면 x축 최소값으로 조정
transform.position = pos; // 조정된 값을 현재 position에 대입
대략 이런식이 되는데, 여기서 편리한 방법이 하나 있다.
바로 Mathf.Clamp()를 이용하는 방법.
Mathf.Clamp()를 사용하면, 코드도 짧아진다!
private Vector3 pos; // 위치 제한 계산/판단을 위한 임시 변수
private float maxXPosition; // x축 최대값
private float minXPosition; // x축 최소값
pos = transform.position; // 현재 position값을 입력
// pos.x값을 최소값 ~ 최대값 사이로 잘라낸다.
pos.x = Mathf.Clamp(pos.x, minXPosition, maxXPosition);
transform.position = pos; // 조정된 값을 현재 position에 대입
던전 크롤러는 대략 이런 느낌의 게임. ( Coldfire Keep - Old School 3d Dungeon Crawling! )
■ 코드
public GameObject cam;
private void Awake()
{
// 바라보게 될 카메라를 설정한다. (기본값을 따로 찾지 못하면 하나 지정해서 넣어준다
if (cam == null)
cam = GameObject.Find("camMain");
// y좌표를 카메라와 맞춘다.
transform.position = new Vector3(transform.position.x, cam.transform.position.y, transform.position.z);
}
void Update()
{
// 항상 카메라의 위치를 바라보게 한다.
transform.LookAt(cam.transform.position);
}
■ 결과
움직이기 전움직인 후
■ 후기
- transform.LookAt을 바로 떠올릴 수 없었다!
- Parent가 되는 Empty Object는 없어도 되더라!
- Y축 회전 이외의 방향으로 하는건 안해봐서 모르겠다!
- Y축 이외의 회전은 Parent에 스크립트를 연결해 주고, 자식을 적당한 각도로 회전시켜주면 될 것 같다.