문제 해결

발사체 캐릭터 에셋 적용 시 물리 적용 안됨 문제 해결

맛난과자 2024. 6. 26. 10:56

 

분명 발사체를 Sphere 오브젝트로 했을 때는 정상적으로 작동하였다.

근데...

 

캐릭터 적용 시 새총 구현

 

내가 하루를 통째로 갈아서 만든 새총 물리 구현이 죽었다....

 

 

일단 보이는 문제는 이러하다

  1. 궤적의 높이가 너무 낮게 생성된다.
  2. 발사체가 던져진 후, 위로 등속도 이동을 한다.

이외에도 고무가 위아래로 움직이는 것과 당길 때 받침대가 뒷 쪽을 본다는 문제점이 있지만, 이는 새총 자체의 문제이므로 나중에 해결하기로 했다.

 

 

 

궤적 높이 문제

 

의외로 간단하게 해결되었다.

마우스를 조금만 움직여도 캐릭터 위치가 휙휙 바뀌어서 조작감을 위해 마우스 위치 차이의 값에 50.0f 를 나누었었다.

그런데 그러면 궤적도 너무 낮게 나오고, 던지는 힘도 많이 약해져서 그 부분의 변수에 10.0f 정도를 곱했었는데 너무 적었나보다.

30.0f 값을 곱하니까 해결되었다.

 

Vector3 gap = clickMousePosition - Input.mousePosition;
float currentGap = gap.magnitude / 50.0f;

// ...(중략)....
trajectory.ShowTrajectory(transform.position, dir * (((currentGap * 30.0f) / MaxGapSize) * MaxPower));
if (Input.GetMouseButtonUp(0))
{
    // 앵그리 버드를 날린다.
    Shot(dir, (currentGap * 30.0f) / MaxGapSize);
}

 

 

 

 

발사체 발사 문제

구와 캐릭터 궤적 비교

 

잉?

인스펙터   -> 둘의 리지드바디, 콜라이더, 스크립트까지 모두 동일하다.

중력   -> useGravity도 확인해봤지만 날아갈 때 true가 적용되어있다.

힘   -> MaxPower를 8에서 100으로 바꿔보았는데 빠르게 위로 날아갔다.

방향   -> 힘의 방향도 그대로이다.

 

이 모두가 아니라면,

캐릭터 프리팹 문제라는 소리인데.

프리팹의 요소에는 모두 Mesh filter와 Mesh Renderer 밖에 없다.

물리를 제어할만한 아이가 없다는 말이다.

 

유니티쨩과의 대결

 

캐릭터 문제로 확신하기 위해 유니티쨩으로 비교해본 결과, 역시 이 캐릭터들이 문제인 것 같다.

 

혹시나 스크립트를 Sphere에서 바로 복사 붙여넣기한게 문제인가 싶어 직접 컴포넌트를 추가해보았지만,

역시나 아니었다.

 

아니 진짜 왜 이럼.

 

 

아아ㅏ아아ㅏ강가아강ㄱ아ㅏ악

유니티쨩과 내 캐릭터의 다른 점!!!

Sphere와 내 캐릭터의 다른 점!!!

 

바로 애니메이터의 유무였다!!!!

 

애니메이터 유무 비교

 

애니메이터를 지우니 아주 행복하게 날아가는 내 파랑새...

 

알고 보니,

 

애니메이터 컴포넌트의 Apply Root Motion이 활성화 되어 있었다.

 

Apply Root Motion이 활성화되어 있으면 애니메이션 클립에 위치, 회전 요소 변경이 있다면 실제 객체에 적용이 된다.
아니 근데 저는 애니메이터에 아무 애니에 안 넣었는뎁쇼.

apply root motion이 실제 객체의 위치를 크게 제어하고 있나보다.

 

 

 

해결 방법

 

애니메이터 컴포넌트의 Apply Root Motion을 비활성화해준다.