맵 테두리에 벽을 만들고 Tilemap Collider Component를 추가하여 캐릭터 Collider와 충돌하게 설정하였는데 벽에 딱 붙어서 이동하다 보면 캐릭터가 멈추는 현상이 발생했다.
맵을 계속 돌아다니면서 어디에서 멈추는지 확인한 결과 Tile-Tile Collider 사이에서(Tile을 지나고 다음 Tile에 닿을 때) 멈춘다는 것을 확인했고 문제를 해결하기 위해 Collider를 변경하는 방법을 알아보았다.
Tilemap Collider는 각각의 타일을 Collider로 만드는데 Composite Collider를 사용하게 되면 하나의 Collider 형태로 합쳐져 타일과 타일 사이에 끼일 일이 없어진다.
타일 맵 테두리에 벽을 만들 때 캐릭터가 위로 올라와야 하는 부분과 가려져야 하는 부분을 고려하지 않고 한번에 만들었다.
두 부분을 BackWall과 FrontWall로 나누고 Layer를 설정하여 각각 플레이어보다 뒤, 앞에 오게 설정하였다.
public class MainCameraController : MonoBehaviour
{
[SerializeField] Transform player;
[SerializeField] float smoothing = 0.2f;
private void FixedUpdate()
{
Vector3 targetPos = new Vector3(player.position.x, player.position.y, transform.position.z);
transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);
}
}
Vector3.Lerp(선형보간)을 이용하여 카메라의 위치가 부드럽게 변경되게 설정하였다.
플레이어 캐릭터의 이동은 Rigidbody를 건드리기 때문에 FixedUpdate를 사용하고 있다. Camera도 이에 맞춰 FixedUpdate를 사용해주었다.