Camera - 플레이어를 따라가는 카메라
카메라가 플레이어를 따라가도록 하는 방법을 배워보자.
Asset 폴더로 가서 우측 키 누르고 Create - 2D - Physics Material 2D를 만들고 Player로 이름 짓는다. 인스펙터에서 Friction과 Bouncness는 0으로 만들어준다. Asset에서 만든 Material Player를 Standing Sprite 오브젝트를 선택하고 인스펙터에 나온 Capsule Collider 2D의 Material 부분으로 끌어온다.
Project창에서 Asset - Scripts 폴더에서 우측클릭하여 Create - C# Script로 스크립트를 만들어준다. 카메라가 플레이어를 따라가게 하기 위함이다. CameraController라고 파일명을 지어주고 Main Camera 오브젝트로 가서 방금 만든 스크립트 파일을 끌어와준다.
추후 고려해야할 사항은 게임에서 플레아어가 씬들을 오고가며 계속 활성화되게 만들어야 한다는 것이다. 하지만 카메라는 씬 마다 다른 카메라를 사용하게 될 것이다. 그래서 우리는 카메라의 레퍼런스를 플레이어에 계속 저장할 수가 없다. 왜냐하면 플레이어는 계속 씬과 씬을 오고갈 것이기 때문이다.
그래서 카메라가 플레이어를 게임이 시작하면 찾을 수 있도록 만든다.!
private PlayerController player;
// Start is called before the first frame update
void Start()
{
player = FindObjectOfType<PlayerController>();
}
메인 카메라 오브젝트를 선택하고 인스펙터는 디버그 모드로 만들어준다.
게임을 시작하기 전에는 왼쪽 사진처럼 Camera Controller(Script)에서 Player를 찾을 수 없지만, 게임 시작을 누르면 Player에 Player가 들어가는 것을 확인할 수 있다.
이제 카메라가 플레이어를 따라 움직이도록 만들어보자. 아래 코드를 작성한다.
하지만 카메라가 아무것도 안보여주고있다. 그이유는 우리가 기존에 오브젝트를 생성할 때 Z Value를 무시하고 만들었는데, 유일하게 Z Value를 무시할 수 없는게 바로 카메라다. 그래서 Hierarchy에 있는 오브젝트를 하나하나 선택하면 Z value가 무시되어있는데 Main Camera 오브젝트를 선택하면 Z value값이 들어가있는 것을 확인할 수 있다.
Scene에서 2D->3D 버튼을 눌러 확인해보면 카메라가 Z값이 플레이어와 달라 떨어져있는 것을 확인할 수 있다.
Vector3를 이용해 아래 코드를 입력해준다. 마지막 z좌표가 , player.transform.position.z - 10f); 로 되어있는데, 최초에 카메라가 가진 value인 10을 빼주었다. (때에 따라 player.transform.position.z 만 입력해도 될 때도 있다.)
void Update()
{
if(player != null) {
transform.position = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z - 10f);
}
}
카메라가 플레이어의 Z값에 맞추어 움직이는 것을 볼 수 있다.
* 유니티에서의 벡터
Vector3
유니티에서는 3D 벡터의 값을 표현하기 위한 데이터타입은 Vector3 구조체이다. Vector3 데이터타입을 사용해서 3D 공간에서의 x, y, z 좌표를 가진 세 개의 원소로 표현해야 한다. Vector3는 x, y, z 값뿐만 아니라 벡터를 다루기 위한 기능들도 포함하고 있다. Vector3는 변수를 선언하고 반드시 초기화 해야한다.
Vector3 초기화 방법
1. Vector3.zero 프로퍼티로 초기화하기
Vector3 vec = Vector3.zero; //Vector3(0, 0, 0);
2. 벡터는 메소드를 포함하고 있는 구조체이므로 생성자를 이용해 값을 할당 받을 때는 new로 할당 한다.
Vector3 vec = new Vector3(4f, 9f, 3f);
3. Set() 메소드를 이용해 초기화하기
Vector3 vec.Set(2, 3, 4);
4. 벡터값은 개별적으로 각 원소에 접근과 수정이 가능하다.
Vector3 vec = Vector3(5, 9, 2);
vec.x = 50;
vec.y = 90;
vec.z = 20;
* 벡터 관련 출처: https://euncero.tistory.com/361
'[Unity] 유니티 게임개발' 카테고리의 다른 글
[Unity: 유니티 게임 개발] Player - 플레이어에 애니메이션 Flip하기 (0) | 2022.12.14 |
---|---|
[Unity: 유니티 게임 개발] Player - 플레이어에 애니메이션 적용하기 (0) | 2022.12.14 |
[Unity: 유니티 게임 개발] Player - 플레이어 점프시키기 (0) | 2022.12.14 |
[Unity: 유니티 게임 개발] Player - 플레이어 움직이기 (1) | 2022.12.13 |
[Unity: 유니티 게임 개발] Player - 플레이어 만들기 (0) | 2022.12.13 |