그동안 작업했던 프로젝트 일지를 올리려고 보니까 블로그에 마지막으로 남겼던 글이 무려 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를 줬습니다.
'Unity (C#) > Old' 카테고리의 다른 글
유니티 저장&불러오기 (PlayerPrefs) (0) | 2018.11.19 |
---|---|
유니티 캐릭터 점프 기능 만들기 (0) | 2018.10.24 |
유니티 총알(발사체) 발사하기 (6) | 2018.10.05 |
유니티 일시정지 기능 만들기 (0) | 2018.10.04 |
유니티 Nav Mesh Agent 이용해서 AI 만들기 (플레이어 따라다니는 적) (3) | 2018.10.02 |
최근댓글