Unity_2기 내일배움캠프 TIL

Unity_2기 9주차 (230103)

잼잼재미 2024. 1. 3. 16:52

오늘은 어제 구현한 총기 구현에서 추가적으로 총기 반동과 정조준 상태를 구현했다.

 

 

구현 내용


총기 반동, 정조준 추가

https://kkln2486.tistory.com/218

 

3D 총기 구현

총기 구현 1. GunHolder 생성 Player 자식으로 GunHolder 빈오브젝트, 그 자식으로 Gun 프리팹 생성 Gun 프리팹 자식으로 Amature 빈 오브젝트, 그 자식으로 Gun 빈 오브젝트 생성, 총알 발사 ParticleSystem 추가 *

kkln2486.tistory.com

 

 

트러블 슈팅


총기 반동 

 

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