[Unity3D] RPG게임 카메라 - 줌 인/아웃, 카메라 회전. [Part 3]

※ 주의 

이 글은 아마추어가 개인적으로 생각하여 작성하는 것으로, 이곳에 나오는 내용을 맹신하지 않는것을 당부드립니다.



기능정리


1. 플레이어를 따라오는 카메라.

1.5. 플레이어의 움직임.

2. 마우스 휠 카메라 줌 인,아웃 기능.

3. 마우스 오른쪽 버튼 클릭 후 카메라 회전.

- x,y축 회전

- x축 회전의 한계치 설정.




2. 마우스 휠 카메라 줌 인,아웃


Input에는 마우스 휠에대한 반환값도 제공해주고있다.

Input.GetAxis("Mouse ScrollWheel");

반환값은 float로 반환되며 휠을 위로 굴릴경우 양수의 값이,

밑으로 굴릴경우 음수의 값이 반환된다.


이를활용하여 줌 인,아웃 기능을 수행할 것이다.


카메라맨과 카메라의 거리를 유지해주는 Distance라는 변수에

휠을 위로 굴릴경우 Distance를 감소시켜주어 줌 인 기능을 수행하고,

휠을 밑으로 굴릴경우 Distance를 증가시켜주어 줌 아웃 기능을 수행하여 보자.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Axis : MonoBehaviour {
 
    public float ZoomSpeed;         // 줌 스피드.
    public float Distance;          // 카메라와의 거리.
 
    private Vector3 AxisVec;        // 축의 벡터.
    private Transform MainCamera;   // 카메라 컴포넌트.
 
    void Start()
    {
        MainCamera = Camera.main.transform;
    }
 
    void Update()
    {
        Zoom();
    }
 
    // 카메라 줌.
    void Zoom()
    {
        Distance += Input.GetAxis("Mouse ScrollWheel"* ZoomSpeed * -1;
        Distance = Mathf.Clamp(Distance, 5f, 20f);
 
        AxisVec = transform.forward * -1;
        AxisVec *= Distance;
        MainCamera.position = transform.position + AxisVec;
    }
}
cs



휠을 위로 굴렸을 때 줌 인 효과를 내고 싶다면 Distance에 값을 그대로 더해주면 안된다.

휠을 위로 굴리면 반환값이 양수 값이기 때문에 Distance는 자연히 커지게 되고

줌 인 효과가 아닌 줌 아웃 효과가 나타나게 된다.


그렇기 때문에 Distance += 휠 값 * 줌 스피드 * -1;

-1을 곱해줌으로써 음수 값으로 만들고 휠을 위로 굴렸을 때 Distance값이 감소하게 된다.


Mathf.Clamp함수는 값을 제한해주는 함수이다.


Mathf.Clamp(Value, Min, Max); 


Value는 값을 제한해줄 값을 집어넣고, Min은 그 값의 최소값, Max는 그 값의 최대 값을 지정해 준다.




결과