728x90

플레이어 또는 오브젝트를 AddForce로 이동할때 오브젝트가 관통이 된다면 저번에 알려드린 방법으로 해결을 하면 되지만

 

transform.Translate 또는 position으로 이동을 하게될때 일정 속도 이상부터는 오브젝트가 관통이 되어 여러가지 방법을 써봤는데 그중 가장 간단한 방법을 알려드리겠습니다.

 

문제

- 두께와는 상관없이 벽을 그대로 관통하는 모습 

- 속도가 느리다면 물체 통과하진 않는데  일정 속도부터는 물체를 통과 

 

해결법

 

private bool wallcollision; //벽과 닿은상태

다음과 같이 변수를 선언해줍니다 벽과 닿았다면 true 닿지않으면 false를 시켜줄 계획입니다

 

WallCheck() 함수에서 Physics.Raycast를 통해 플레이어의 위치로부터 원하는 방향과 길이로 ray를 쏘고 충돌한 Layer가 Wall이라면 wallcollision 에 true값이 들어가게 됩니다.

 

그럼 wallcollision이 true라면 앞으로 더이상 못움직이고 false라면 움직일 수 있어야 합니다 

그리고 오브젝트가 앞만 볼 수 있는데 한번 true가 되어버리면 계속 못움직이겠죠??

 

그래서 키 입력 방향에 따라 플레이어가 바라보는 방향이 전환되도록 해주었습니다

 

if(!wallcollision)
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

 

다음 조건을 통해서 플레이어의 움직임을 제어해주었습니다.

 

다음 Layer에서 Wall 레이어를 추가해주고 통과하면 안되는 오브젝트를 해당 레이어로 변경해줍니다.

 

 

결과

아까와는 달리 통과하지 않는 모습을 확인할 수 있습니다!!

 

다른 방법도 찾아보면 있지만 저는 일단 가장 간단한 방법으로 구현해봤습니다

 

특정 레이어를 통과히자 못하게 하는것이 아닌 모든 물체를 검사하여 통과하지 못하게 하는 방법이 있지만 상당히 무거운 작업임으로 사용하지 않았습니다.

 

플레이가 진행되면서 계속 Raycast를 통해 체크를 하는 작업또한 어느정도 부담이 가는 방법이라고 할 수 있습니다.

 

728x90

+ Recent posts