오늘은 어제 구현한 총기 구현에서 추가적으로 총기 반동과 정조준 상태를 구현했다.
구현 내용
총기 반동, 정조준 추가
https://kkln2486.tistory.com/218
트러블 슈팅
총기 반동
while (_currentGun.transform.localPosition.z >= _originPos.z - _currentGun.RetroActionForce + 0.02f)
{
_currentGun.transform.localPosition = Vector3.Lerp(_currentGun.transform.localPosition, recoilBack, 0.4f);
Camera.main.transform.localEulerAngles += new Vector3(-10, 0, 0);
yield return null;
}
위 코드 처럼, 코루틴 함수 내에서 총이 뒤로 밀리는 함수에서 Main 카메라의 회전이 일어나도록 코드를 작성했는데, 작동하지 않았다. 아마도 시네머신 카메라를 사용해서 그런 것 같다.
using Cinemachine;
[SerializeField] private CinemachineVirtualCamera _virtualCamera;
private CinemachinePOV _pov;
private void Awake()
{
_pov = _virtualCamera.GetCinemachineComponent<CinemachinePOV>();
}
IEnumerator CORetroAction()
{
while (_currentGun.transform.localPosition.z >= _originPos.z - _currentGun.RetroActionForce + 0.02f)
{
_currentGun.transform.localPosition = Vector3.Lerp(_currentGun.transform.localPosition, recoilBack, 0.4f);
_pov.m_VerticalAxis.Value += -_currentGun.RetroActionForce;
yield return null;
}
}
시네머신 카메라는 Main 카메라에 접근하면 안되고, VirtualCamera에 접근해서 CinemachinePOV의 VerticalAxis 값을 수정해야 회전 변경이 잘 적용되었다. 위와 같이 코드를 수정해서 해결했다.
오늘의 회고
총기 반동을 구현하는데 가장 어려웠다. 원래는 총을 발사할 때, Main 카메라의 rotation 값을 바꾸려고 했지만 Player를 작업한 조원이 시네머신 카메라로 구현을 했는데, Main 카메라의 Transform이 변경되지 않았다. 검색을 통해 VirtualCamera에서 카메라 설정을 바꾸는 방법을 알게되었다. 총기 반동과 정조준을 구현하니 생각보다 더 FPS 느낌이 많이 났다. 추가적으로 정조준 상태일 때, 반동뿐만 아니라 정확도도 조절하는 방법을 찾아서 구현해보겠다!
'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글
Unity_2기 9주차 (230105) (0) | 2024.01.05 |
---|---|
Unity_2기 9주차 (230104) (1) | 2024.01.04 |
Unity_2기 9주차 (230102) (0) | 2024.01.02 |
Unity_2기 8주차 (231229) (1) | 2023.12.29 |
Unity_2기 8주차 (231228) (1) | 2023.12.28 |