반응형

그동안 작업했던 프로젝트 일지를 올리려고 보니까 블로그에 마지막으로 남겼던 글이 무려 10월 5일.... 그 후로 작업을 매일하지 못한데다가 일지로 정리할 만큼 작업물이 만들어지지 않아서 미루고 있긴 했지만 설마 이렇게 오랫동안 글을 안올리고 있었을 줄은 ... ㅠ


그래서 오늘은 프로젝트도 어느정도 구간완성도 했고 포스팅도 하고 갈게요 !


오늘은 대부분의 RPG 게임들과 같이 위에서 캐릭터를 내려다보는 시점의 카메라를 만들고 오브젝트가 움직이는 걸 같이 따라다니는 카메라를 만들어 보도록 할게요 ~





먼저 프로젝트를 만들어 주시고 카메라를 적당히 원하는 각도로 맞춰주세요 ~

당장 안맞춰놔도 되긴 하지만 나중에 스크립트 상에서 원하는 카메라 각도나 위치를 지정해줘야하니까 미리 '이정도면 되겠다 ~' 싶게 맞춰주시면 편해요 :D



그리고 굳이 오브젝트에 컨트롤러를 넣지 않아도 되는 실습이긴 하지만 나중에 완성물을 쉽게 테스트 하기 위해서 오브젝트를 원하는 대로 조작할 수 있게 할껀데, 이건 중요하지 않으니 에셋을 이용해서 추가해줄게요

캐릭터컨트롤러 에셋을 사용할 껀데 추가는 좌측 상단에서 하면 되고 프로젝트에는 Prefab을 추가해서 사용합시다.


캐릭터컨트롤러 에셋에서 프리팹을 정상적으로 추가해줬으면 플레이로 들어가서 WSAD키로 캐릭터가 움직이는 걸 확인할 수 있습니다 !


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ThirdCamera : MonoBehaviour {
 
    public GameObject target;
 
    public float offsetX;
    public float offsetY;
    public float offsetZ;
 
    // Update is called once per frame
    void Update () {
        Vector3 FixedPos =
            new Vector3(
            target.transform.position.x + offsetX,
            target.transform.position.y + offsetY,
            target.transform.position.z + offsetZ);
        transform.position = FixedPos;
    }
}
 
cs

그 다음은 스크립트를 작성해줍시다.

따라다닐 게임오브젝트 'target'과 카메라와의 위치를 조절해 줄 offsetX,Y,Z를 만들어 줍니다.

그리고 Vector3 변수를 하나 만들어주고 target 오브젝트와의 거리를 offset 만큼 떨어지게 만들어줍니다.

target.transform.position.x + offsetX, 

'target'의 transform.position값에서 x 값에 'offsetX' 값만큼 (+)더해주는 겁니다.

그러면 원래 target 오브젝트의 x값에서 offset 만큼 더해지니까 거리가 멀어지겠죠 ?


똑같은 방법으로 x,y,z 값들을 더해주고 그 위치에 카메라가 위치하도록

transform.position = FixedPos; 오브젝트의 위치값을 FixedPos 벡터값으로 줍니다.


(target 게임 오브젝트나, offsetX,Y,Z들은 스크립트 상에서 조절해줘도 상관없지만 실습하기 편하게 public으로 만들어서 건드릴게요 ~)


작성한 스크립트를 카메라에 넣어주고 target에 따라다닐 대상 오브젝트를 드래그드랍 해주시고, offset값들에 현재 카메라의 Position x,y,z 값을 그대로 넣어줍니다 ! (프로젝트 초기에 카메라 위치를 미리 잡아놨기 때문에 그대로 넣어주는 것 뿐입니다. 혹시나 미리 배치하지 않았거나 다른 위치로 놓고 싶으시면 원하시는 값을 넣어주면 됩니다)


제대로 따라오신 상태로 플레이 해보시면 영상에서 처럼 플레이어 오브젝트를 따라다니는 모습을 볼 수 있습니다 ~


그런데 이렇게만 보면 모르지만 사실 실제 게임들에서 캐릭터를 따라다니는 카메라를 보면 플레이어의 위치를 그대로 따라가기 보단 일정한 시간간격을 두고 부드럽게 이동하는 모습을 볼 수 있는데 이처럼 부드럽게 이동하는 효과까지 넣어줄게요 !


(일단 따라다니는 카메라 자체는 여기까지가 완성이니까 이 후에 작업은 원하시는 분들만 따라하시면 됩니다 !)


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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ThirdCamera : MonoBehaviour {
 
    public GameObject target;
 
    public float offsetX;
    public float offsetY;
    public float offsetZ;
 
    public float DelayTime;
 
    // Update is called once per frame
    void Update () {
        Vector3 FixedPos =
            new Vector3(
            target.transform.position.x + offsetX,
            target.transform.position.y + offsetY,
            target.transform.position.z + offsetZ);
        transform.position = Vector3.Lerp(transform.position, FixedPos, Time.deltaTime * DelayTime);
    }
}
 
cs

위에서 작성했던 스크립트 중에

transform.position = FixedPos; 

이 부분을

transform.position = Vector3.Lerp(transform.position, FixedPos, Time.deltaTime * DelayTime); 이렇게 바꿔주시면 끝입니다.


간단하게 풀어 설명하자면 Lerp라는 기능을 이용해서 현재 위치 transform.position 에서 이동할 위치 FixedPos 까지 가는데 Time.deltaTime * DelayTime 만큼의 이동시간을 주는거에요.

예를들어 DelayTime을 3으로 주면 Time.deltaTime에 3을 곱한 시간이 걸리도록 만들어주는 겁니다.

(이 스크립트에선 DelayTime 변수를 public으로 선언해서 인스펙터에서 수정할 수 있도록 했기 때문에 초기화값을 주지 않았습니다. 혹시나 작업을 다 따라했는데 카메라 움직임에 차이가 없다면 값을 주지 않아서 0으로 되어있어서 그럴꺼에요)


스크립트를 저장하고 나온 뒤에 스크립트를 넣어준 카메라에서 DelayTime 값을 원하는대로 수정하고 실행해보시면 영상처럼 될 꺼에요 ~ 영상에서의 DelayTime 값은 5를 줬습니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기