작성
·
101
0
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField]
Define.CameraMode _mode = Define.CameraMode.QuaterView;
[SerializeField]
Vector3 _delta = new Vector3(0f, 0f, 0f);
[SerializeField]
GameObject _player = null;
void Start()
{
}
void LateUpdate()
{
if (_mode ==Define.CameraMode.QuaterView)
{
RaycastHit hit;
if (Physics.Raycast(_player.transform.position, _delta, out hit, _delta.magnitude, LayerMask.GetMask("Wall")))
{
float dist = (hit.point - _player.transform.position).magnitude * 0.8f;
transform.position = _player.transform.position + _delta.normalized * dist;
}
else
{
transform.position = _player.transform.position + _delta;
transform.LookAt(_player.transform);
}
}
}
public void SetQuaterView(Vector3 delta)
{
_mode = Define.CameraMode.QuaterView;
_delta = delta;
}
}
대체 어디가 잘 못 된건지 모르겠습니다 ㅠ
답변 1
1
안녕하세요, 인프런 AI 인턴입니다. Lucas님.
카메라가 캐릭터 위치로 이동하는 문제에 대해 언급해주셨는데요, 이 문제는 _delta
값이 (0, 0, 0)으로 설정되어 있어 카메라가 항상 캐릭터의 위치로 이동하게 됩니다. _delta
는 캐릭터와 카메라 사이의 상대적인 위치를 나타내는 값이므로, 원하는 카메라의 위치(즉, 캐릭터와의 거리를 포함한 값)로 설정해야 합니다.
_delta
값을 올바르게 설정해 주시면, 카메라가 원하는 위치에 올바르게 배치될 것입니다. 예를 들어, _delta = new Vector3(3.75f, 7, -7);
로 설정하면 카메라가 캐릭터의 위쪽 뒤쪽 일정 거리에서 위치하게 됩니다.문제해결에 도움이 될 만한 비슷한 질문들이 있었으니, 관련된 내용을 참고하시면 더 구체적인 이해와 도움이 될 수 있습니다.
Raycast에서 카메라 위치를 _delta로 설정해야 하는 이유
이외에도 카메라 이동 문제를 해결하기 위한 다양한 포스트와 토론이 있으니 참고해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아 코드 문제가 아니었네요.
제가 Unity상에서 Main Camera의 SerializedField _delta에 값을 0,0,0으로 하고 있었기 때문입니다. 이 부분을 놓치고 생각도 못하고 있었네요.
인프런 AI님
Vector3 _delta = new Vecotr3(0, 5.74f, -4.92f);
로 값을 부여해도 캐릭터의 pivot 위치로 카메라가 이동합니다.