안녕하세요, NAT의 첫 번째 게임 개발 방법에 대한 자세한 기사 시리즈에 오신 것을 환영합니다! 우리는 현재 게임에서 차량이 작동하도록 모든 것을 구현하는 과정에 있습니다. 지난 기사에서는 차량 이용 시 카메라 교체를 시행했는데, 이번에는 기본 충돌 구현에 대해 알아보겠습니다.
이 부분에서 시작할 때는 충돌기가 구현되지 않았고 집 등을 통해 차량이 완전히 떠다니게 되었다.
Unity Editor에서 시제품 제작
평소처럼 코드에 뛰어들기 전에 먼저 유니티 에디터의 변경 사항을 구현했습니다.
차량과 충돌할 수 있어야 하는 장면의 모든 물체에 충돌기를 추가했습니다(위의 이미지 참조). 이어 플레이어가 차량을 이용할 때 서 있는 박스 충돌기를 보드에 추가하고 다른 물체와의 충돌을 활성화하는 박스 충돌기 구성 요소에서 트리거됨 확인란을 선택 취소했다. 불행하게도, 이것은 내가 생각했던 것만큼 잘 되지 않았다.
문제를 해결하기 위해 차량을 지상에서 들어 올려 공중충돌이 멈출지, 차량이 지면과 충돌해 문제가 발생한 것인지 알아보려고 했다.
그것을 지면에서 들어 올린다고 문제가 해결되지 않았고, 차량은 여전히 회전하면서 무언가와 충돌합니다. 제 다음 이론은 플레이어의 리지드바디 컴포넌트가 차량의 충돌기와 충돌하고 있다는 것입니다. 그래서 리지드바디를 비활성화해서 무슨 일이 일어날지 보도록 하겠습니다.
보시다시피 차량이 더 이상 자신과 충돌하지 않으므로 이제 강체 차체가 문제였으며 다음 섹션에서 코드로 구현해야 할 사항을 알게 되었습니다.
차량에 탑승할 때
- 플레이어의 강체 사용 안 함
- 차량의 박스 충돌기에 대해 "트리거 여부"를 거짓으로 설정하십시오.
차량에서 내릴 때
- 차량의 박스 충돌기에 대해 "트리거 여부"를 true로 설정하십시오.
- 플레이어의 강체 사용
코드 변경사항 구현
먼저 useVehicleCollisions라는 새로운 기능을 차량 스크립트에 추가하겠습니다.오직 플레이어가 차량을 사용하는지에 대한 부울 매개 변수만 받습니다. 이 함수가 사용하는 두 번째 매개 변수는 어떤 게임 객체가 플레이어를 나타내는지를 알기 위한 것이다.
public void UseVehicleCollisionsOnly(bool mode, GameObject player)
{
if (mode){}
else{}
}
첫 번째 단계로 모드 변수를 플레이어가 차량을 사용하고 있는지 여부와 연결하고 이를 기반으로 강체를 활성화 또는 비활성화합니다.
player.GetComponent<Rigidbody>().detectCollisions = !mode;
우리가 가지고 있는 현재 버전의 차량에서는 플레이어 캐릭터가 차량을 사용할 때 서 있는 보드가 충돌을 감지하고 반응하는 차량의 일부가 될 것이다.
차량에 대한 충돌을 켜고 끌 수 있도록 앞서 언급한 게임 객체를 방금 만든 함수가 사용할 수 있는 변수로 저장하고 다음 변수 선언으로 하겠습니다(직렬화 사용).Unity 편집기에서 값을 할당할 수 있도록 변수가 있는 필드입니다.
[SerializeField] private GameObject collidingObject;
그러면 다음 줄을 기능에 추가하여 차량 보드에 대한 박스 충돌기 활성화 또는 비활성화하겠습니다.
collidingObject.GetComponent<BoxCollider>().isTrigger = !mode;
마지막으로 차량 승하차 기능에 다음 줄을 추가하여 이 글에서 설명한 기능을 사용하겠습니다.
UseVehicleCollisionsOnly(player.GetComponent<MoveCharacter>().isUsingVehicle,player);
좋아, 한번 해보자!
의도한 대로 작동하며 보행 및 차량 사용 시 플레이어가 올바르게 충돌합니다.
다음은 이 기능의 최종 작동 버전입니다.
결론
이제 차량에 대한 작업 충돌이 있기 때문에 5부는 이것으로 끝이 났습니다.
차량 구현은 거의 완료되었지만 몇 가지 작업이 남아 있습니다. 첫 번째 버전에서 차량이 완전히 구현되기 전에 수행해야 할 작업의 현재 목록은 다음과 같습니다.
- 차량 사용을 위한 특정 애니메이션 구현
- 플레이어가 직접 제어하지 않고 속도와 방향이 바람의 영향을 받는 스티어링 시스템
'프로그래밍' 카테고리의 다른 글
이진 검색 - 더미용 (0) | 2022.01.11 |
---|---|
주간 요약 #56 (0) | 2022.01.04 |
베스트 오브 마이 워크 (0) | 2022.01.04 |
리트코드 #997. 마을 판사 찾기 (0) | 2022.01.04 |
React 18의 새로운 기능은? (0) | 2022.01.04 |
댓글