유니티 다크소울 따라만들기 ch_3 카메라 충돌
이 글은 유튜브 Sebastian Graves Create Dark Souls를 보고 따라 만들면서 헷갈리는 부분을 정리한 글입니다.
추가 기능 설명
카메라가 벽 같은 곳을 통과하지 않도록 하는 기능
Scripts
CameraHandler에 추가된 부분
CameraHandler
```c# public void FollowTarget(float delta) { // 카메라가 플레이어를 부드럽게 추적함 Vector3 targetPosition = Vector3.SmoothDamp (myTransform.position, targetTransform.position, ref cameraFollowVelocity, delta / followSpeed); myTransform.position = targetPosition; HandleCameraCollisions(delta); } private void HandleCameraCollisions(float delta) { targetPosition = defaultPosition; RaycastHit hit; Vector3 direction = cameraTransform.position - cameraPivotTransform.position; direction.Normalize(); if (Physics.SphereCast(cameraPivotTransform.position, cameraSphereRadius, direction, out hit, Mathf.Abs(targetPosition) , ignoreLayers)) { float dis = Vector3.Distance(cameraPivotTransform.position, hit.point); targetPosition = -(dis - cameraCollisionOffset); } if (Mathf.Abs(targetPosition) < minimumCollisionOffset) { targetPosition = -minimumCollisionOffset; } cameraTransformPosition.z = Mathf.Lerp(cameraTransform.localPosition.z, targetPosition, delta / 0.2f); cameraTransform.localPosition = cameraTransformPosition; } ```구현 원리 설명
큰 틀로보면 카메라 피벗과 카메라 사이에 물체를 검사한다.
그 사이에 물체가 있으면 물체의 위치로 카메라가 이동된다.
좀 더 세부적인 것은 다음과 같다.
- Raycast 가 아닌 SphereCast이기 때문에 감지가 단순히 둘 사이를
단순한 직선으로 이어서 선과 무엇이 닿는지를 검사하는게 아닌
구 크기의 두께로 검사한다.
- 어느정도의 Offset값이 있어서 위치가 어느정도 조정된다.
벽에 닿을 때 벽과의 Offset과 플레이어와 카메라의 Offset이 있다.
결과
배운점
- Raucast외에는 따로 다른 것들이 존재하는지 몰랐으나 이번으로
box, Sphere등의 다른 레이캐스트도 존재함을 알았다.
댓글남기기