캐릭터 이동을 구현하였으니, 이제 카메라가 캐릭터를 따라다닐 수 있도록 구현해봅시다.
이전에 만들었던 Scripts 폴더에 MainCamera_Action이라는 스크립트를 생성해줍니다. 이후 다음과 같이 코드를 작성해줍시다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainCamera_Action : MonoBehaviour
{
public GameObject Target; // 카메라가 따라다닐 타겟
public float offsetX = 0.0f; // 카메라의 x좌표
public float offsetY = 10.0f; // 카메라의 y좌표
public float offsetZ = -10.0f; // 카메라의 z좌표
public float CameraSpeed = 10.0f; // 카메라의 속도
Vector3 TargetPos; // 타겟의 위치
// Update is called once per frame
void FixedUpdate()
{
// 타겟의 x, y, z 좌표에 카메라의 좌표를 더하여 카메라의 위치를 결정
TargetPos = new Vector3(
Target.transform.position.x + offsetX,
Target.transform.position.y + offsetY,
Target.transform.position.z + offsetZ
);
// 카메라의 움직임을 부드럽게 하는 함수(Lerp)
transform.position = Vector3.Lerp(transform.position, TargetPos, Time.deltaTime * CameraSpeed);
}
}
offset 변수들은 "타겟으로부터의 카메라의 위치"를 의미합니다. 즉 위의 코드는 타겟으로부터 (0, 10, -10)의 위치에 카메라가 위치한다는 뜻이 됩니다. public으로 설정하여 유니티 내부에서 간편히 변경할 수 있도록 해주었습니다.
카메라의 각도 또한 설정해야 하는데, 이는 유니티 내부에서 카메라의 각도를 직접 조정하는 방법이 가장 편하므로 굳이 스크립트로 작성하지 않았습니다만, 스크립트를 쓰시고 싶다면 위의 코드에 다음 코드를 덧붙여주시면 됩니다.
// ... 는 상기 코드와 동일한 부분입니다.
public class MainCamera_Action : MonoBehaviour
{
//...
public float angleX = 0.0f;
public float angleY = 0.0f;
public float angleZ = 0.0f;
//...
// Update is called once per frame
void FixedUpdate()
{
//...
transform.rotation = Quaternion.Euler(angleX, angleY, angleZ);
}
}
angle 변수를 사용하여 카메라의 각도를 지정해주시면 됩니다.
여기에서도 FixedUpdate를 사용했습니다. FixedUpdate를 이동하는 물체에 사용하는 이유는 Update와 달리 프레임의 영항을 받지 않기 때문이라고 합니다. 즉 이동 시 버벅거릴 수 있는 현상을 좀 더 보정해준다는 뜻으로 이해할 수 있겠습니다.
위에서 설정한 offset 변수들을 TargetPos의 각 x, y, z에 더하여줍니다. 이 작업을 통해 카메라가 가야 할 위치가 계속해서 업데이트됩니다.
이제 카메라의 위치로 이동시킬 차례입니다. 해당 포스팅에서는 카메라가 부드럽게 이동할 수 있도록 Lerp를 사용한 방식으로 스크립트를 작성하였습니다. Lerp에 관한 설명은 mayquartet.tistory.com/44의 마지막 부분에 있습니다.
더욱 자세한 설명을 원하신다면 docs.unity3d.com/kr/530/ScriptReference/Mathf.Lerp.html을 참고하시는 것도 좋을 것 같습니다.
이렇게 스크립트를 다 작성했다면 유니티 화면으로 가서 MainCamera_Action 스크립트를 Main Camera에 부여해주도록 합시다.
스크립트를 부여했다면 카메라가 따라다닐 타겟을 지정해주도록 합시다. 여기에서는 Player를 따라다닐 것이므로 Player를 스크립트의 Target에 넣어주도록 합시다.
이제 유니티를 실행하면 카메라가 플레이어를 따라다니는 것을 볼 수 있습니다.
'Unity' 카테고리의 다른 글
[Unity] 카메라가 바라보는 기준으로 캐릭터 이동 (1인칭) (1) | 2021.04.09 |
---|---|
[Unity] 캐릭터 점프 시 벽에 붙는 현상 수정 (0) | 2021.04.04 |
[Unity] 충돌처리 (0) | 2021.04.03 |
[Unity] 캐릭터 점프 (0) | 2021.04.03 |
[Unity] 캐릭터가 바라보는 방향으로 회전 (0) | 2021.04.03 |