유니티 벽 통과 방지 | 3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45] 2159 좋은 평가 이 답변

당신은 주제를 찾고 있습니까 “유니티 벽 통과 방지 – 3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45]“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 골드메탈 이(가) 작성한 기사에는 조회수 12,149회 및 좋아요 226개 개의 좋아요가 있습니다.

Table of Contents

유니티 벽 통과 방지 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45] – 유니티 벽 통과 방지 주제에 대한 세부정보를 참조하세요

지금까지 구현된 플레이어를 기준으로
물리적으로 문제가 발생할 수 있는 사항들을 고쳐나가는 강좌입니다.
📖 챕터 :
01 00:00 자동 회전 방지
02 02:06 충돌 레이어 설정
03 04:45 벽 관통 방지
04 10:27 아이템 물리 충돌 제거
#유니티기초 #유니티강좌 #유니티3D #쿼터뷰

유니티 벽 통과 방지 주제에 대한 자세한 내용은 여기를 참조하세요.

[Unity] RigidBody : Collider를 만들었는데 벽을 통과할 때

[서문] 벽에 Coller를 넣었음에도 가끔 플레이어가 벽을 통과하는 버그가 발생하곤 합니다. 물체의 가속도가 일정량 이상으로 올라가면 생기는 버그 …

+ 여기에 더 보기

Source: geukggom.tistory.com

Date Published: 9/22/2022

View: 6665

유니티3D 벽 뜷고 지나가? 안돼! 콜라이더(Collider) 만들기.

해리포터라는 영화에서 주인공 해리포터는 벽을 뜷고 호그와트로 가는 것을 보게 됩니다. 현실에서는 일반적으로 있을 수 없는 일이지만 가상 세계도 …

+ 여기에 더 보기

Source: itadventure.tistory.com

Date Published: 5/9/2022

View: 7107

Collider를 만들어놔도 벽을 통과해요 ㅠㅠ – 유니티3D

벽에 coller를 만들어놔도 player가 통과를 하네요… 물론 player도 벽도 is kinetic이나 trigger는 체크하지 않았습니다. 그리고 아예 벽을 통과하는 건 아니고, …

+ 여기에 보기

Source: forum.idevkang.io

Date Published: 10/9/2022

View: 278

유니티 리지드바디 통과 현상

벽에 낑기거나 통과 되더군요. 왜 이런가 현상이 일어나나 궁금해서 인터넷에 검색해보니. 리자드 바디의 Collision Detection 설정을 Continuous Dynamic …

+ 더 읽기

Source: sometimes-rest.tistory.com

Date Published: 9/14/2022

View: 3829

피하기 게임 만들기 – 3 <벽 충돌> [유니티 2D 기초 강좌]

멍댕 유니티 강좌 첫 번째 시리즈! 이번에는 캐릭터가 통과하지 못하는 벽을 만들 것입니다. Box 스프라이트를 Scene에 끌어다 넣어 오브젝트로 생성 …

+ 더 읽기

Source: doggie-development.tistory.com

Date Published: 8/29/2022

View: 1106

콜라이더 잘만 붙여놨는데 어쨰서 자꾸 통과하는거지? – 인디 …

그런데 화살이 벽을 그냥 통과해버리는 문제가 발생함 … 원래 키네카틱은 충돌 못할걸 https://answers.unity.com/questions/209656/having-a- …

+ 여기를 클릭

Source: m.dcinside.com

Date Published: 5/17/2021

View: 9567

AA(19) – 벽 뚫기 방지 – 일기

유니티/AA(3D 쿼터뷰 액션 게임). AA(19) – 벽 뚫기 방지 … 레이케스트를 이용해 벽을 감지하고 이동을 멈춰 벽뚫림현상을 방지합니다.

+ 여기에 보기

Source: namjuhyung.tistory.com

Date Published: 10/13/2022

View: 6948

로보로보] 17. Rigidbody 와 Collider 를 이용한 제한 영역 만들기

오늘은, 유니티의 물리 (Physics) 기능을 이용하여, Player 오브젝트와 … 수 있는 제한 영역을 정하는 벽 오브젝트를 만들어 보도록 하겠습니다.

+ 여기를 클릭

Source: m.blog.naver.com

Date Published: 10/28/2021

View: 7125

[Unity] 카메라가 물체/플레이어 통과 못하게 하기

[ 이슈 ]. 카메라를 이동시키면 특정 각도에서 벽이 사라지는 것 같아보임. [ 원인 ]. 저는 StarterAsset 의 PlayerFollowCamera 를 사용 중인데요,.

+ 자세한 내용은 여기를 클릭하십시오

Source: eunjin3786.tistory.com

Date Published: 11/11/2022

View: 8876

주제와 관련된 이미지 유니티 벽 통과 방지

주제와 관련된 더 많은 사진을 참조하십시오 3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45]. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

3D 쿼터뷰 액션게임 - 플레이어 물리문제 고치기 [유니티 기초 강좌  B45]
3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45]

주제에 대한 기사 평가 유니티 벽 통과 방지

  • Author: 골드메탈
  • Views: 조회수 12,149회
  • Likes: 좋아요 226개
  • Date Published: 2020. 8. 21.
  • Video Url link: https://www.youtube.com/watch?v=dynN70kyD9A

[Unity] RigidBody : Collider를 만들었는데 벽을 통과할 때

반응형

[서문]

벽에 Collider를 넣었음에도 가끔 플레이어가 벽을 통과하는 버그가 발생하곤 합니다.

물체의 가속도가 일정량 이상으로 올라가면 생기는 버그로, 원인과 해결 방법에 대해 알아보겠습니다.

[본문]

1) 원인 :

2cm의 Collider가 있을 때, 1프레임 당 1cm 움직이는 물체에는 잘 적용되지만, 1프레임 당 3cm움직이는 물체는

오브젝트의 현재 위치 + 3cm = Collider의 뒷쪽

이 되면서 충돌처리가 잘 되지 않는 것입니다.

2) 해결 방법 :

Interpolate의 옵션을 Extrapolate로 하면 충돌을 1프레임 더 앞서 예측하기 때문에 벽을 통과하는 현상이 나아집니다.

위의 방법에도 버그 현상이 나아지지 않는다면,

Collision Detection의 옵션을 Continuous로, 그래도 나아지지 않는다면 Continuous Dynamic으로 해줍니다.

Continuous Dynamic은 성능을 깎아먹기 때문에 크게 추천하지 않습니다.

벽에 부딪혔을 때 가속도가 더 더해지지 않도록 코드를 설계해야 버그 현상이 일어나지 않습니다.

반응형

유니티3D 벽 뜷고 지나가? 안돼! 콜라이더(Collider) 만들기.

반응형

해리포터라는 영화에서 주인공 해리포터는 벽을 뜷고 호그와트로 가는 것을 보게 됩니다.

현실에서는 일반적으로 있을 수 없는 일이지만 가상 세계도 그럴까요?

지난 시간에는 ‘에셋스토어로 마을 꾸미기’를 다루었는데요.

https://itadventure.tistory.com/408

재미있게도 우리는 건물을 배치한 것 외에는 아무것도 하지 않았는데요.

이 마을에서 자모 로봇을 배치해 플레이해보면 이와 같이 벽을 뜷고 지나갈 수 있는 것을 보게 되는데요.

그 이유는 유니티에서는 보이는 물체 와 충돌하는 물체 가 나뉘어져 있기 때문입니다.

사실상 우리에게 보이는 이 건물들의 모양은 모두 ‘허상’이라는 거지요.

다만 일부 고급 에셋은 ‘충돌영역’이 이미 설정되어 있어 예외일 수도 있습니다.

그 전에 한가지 기본적으로 알아둘 내용이 있는데요.

건물은 여러개의 복잡한 3차원 도형으로 구성되어 있습니다.

그러다 보니 각각의 도형 하나하나를 일일히 충돌체로 만들어 두면 유니티 엔진이 충돌여부를 검사할 때마다

많은 연산을 해야 해서 속도가 느려집니다.

그렇기 때문에 충돌체의 경우 세세한 충돌을 감지하기 보다는 대략적인 윤곽에 해당하는 정육면체나 캡슐(알약을 세워놓은 모양)의 범위만 정해놓고 이를 충돌영역으로 정해두는 것이 일반적인데요.

유니티에서는 이를 콜라이더(Collider) 라고 합니다.

※ 여담으로 가상세계 세컨드라이프에서도 동일한 개념이 있는데 오브젝트 속성 중 팬텀(Phantom) 이라는 속성입니다.

이 체크상자를 체크하면 홀로그램처럼 캐릭터가 물체를 뜷고 지나가지만 체크상자를 꺼두면 물체가 장애물이 됩니다.

이제 이 콜라이더를 하나씩 잡아보도록 할까요?

우선 건물을 하나 선택합니다.

그리고 우측 인스펙터(Inspector) 창을 가장 아래로 스크롤 다운시켜

Add Component 버튼을 클릭합니다

이어서 추가할 컴포넌트로 Physics(피직스) – Box Collider(박스 콜라이더) 순으로 선택합니다.

그러면 건물 주위에 이런 녹색 테두리가 생겨나는데로 이 것이 바로 박스 콜라이더, 즉 충돌체입니다.

실제 보이는건 건물 모양이지만 캐릭터가 지나가려고 할때 장애물이 되는 것은 이 정육면체인 것이지요.

그래야 충돌면 체크하면서 그 영역을 계산할 때 컴퓨터가 힘들어 하지 않습니다.

자모 로봇을 월드에 배치하고 이 건물을 지나가려하면 장애물 때문에 지나갈 수가 없는 것이지요.

이러한 컬리젼 설정 작업을 모든 건물에 적용해주면 됩니다.

중간에는 이러한 모양의 건물도 있을 수 있습니다.

콜라이더를 적용했는데 건물 근처에는 가지도 못해서 좀 더 범위를 줄이고 싶을 때도 있는데요.

이러한 경우를 콜라이더 영역을 편집하는 기능을 이용하면 됩니다.

박스 콜라이더를 추가하면 Edit Collider(콜라이더 편집)이라는 아이콘이 보이실 겁니다.

이 버튼을 클릭하시면 물체 주위에 작은 점이 표시가 되는데요.

이 점을 클릭하여 드래그하면 아래와 같이 박스 콜라이더의 범위를 조정하실 수 있습니다.

아래와 같이 조정해주시면 이제 캐릭터가 지나갈 때 정육면체 영역만이 장애물이 됩니다.

참고로 자모 로봇 캐릭터도 콜라이더가 내부적으로 들어 있습니다.

정육면체는 아니고 알약을 세워놓은 듯한 캡슐 콜라이더이지요.

로봇도 모든 관절을 일일히 충돌체크하면 복잡하기 때문에

바로 이 콜라이더들끼리만 충돌을 감지하는 것이지요.

다만 캐릭터 컨트롤러에 기능이 내장되어 있어 캡슐 콜라이더를 별도로 추가하지는 않습니다.

Radius(반경)과 Height(높이)가 실제 그 크기를 담당합니다.

시도해보실 부분은 카메라를 콜라이더를 설정한 건물이 보이게 이동 배치하고

자모로봇을 그 근처에 배치해 플레이해보시면 됩니다.

자모 로봇을 월드에 배치하는 방법은 아래 게시글에 있으니 참조해 주시면 되겠습니다.

https://itadventure.tistory.com/404

한단계 더 나아가서 카메라가 자동으로 자모 로봇을 따라다니게 하면 더 좋겠지요?

해당 부분은 다음 시간에 다뤄 보도록 하겠습니다.

필요하신 분에게 도움이 되셨을지요?

오늘도 여기까지 읽어 주셔서 감사합니다 🙂

양 무리들에게 울타리는 장애물이라기보다는 보호의 영역이라고 합니다.

울타리가 없으면 양은 먼 곳으로 스스로 벗어나 길을 잃기도 하고 벼랑 아래에 떨어져 버리기도 하기 때문이라고 하는데요. 이와 같이 성경 말씀에서도 삶의 울타리가 되는 존재가 있으며 바로 “예수”라고 전하고 있습니다.

나는 선한 목자라

선한 목자는 양들을 위하여 목숨을 버리거니와

삯군은 목자도 아니요 양도 제 양이 아니라

이리가 오는 것을 보면 양을 버리고 달아나나니 이리가 양을 늑탈하고 또 헤치느니라

달아나는 것은 저가 삯군인 까닭에 양을 돌아보지 아니함이나

나는 선한 목자라 내가 내 양을 알고 양도 나를 아는 것이

아버지께서 나를 아시고 내가 아버지를 아는 것 같으니

나는 양을 위하여 목숨을 버리노라

– 요한복음 10장 11~15절 말씀 –

다음 게시글. 360도 HDRI 배경 적용하기

https://itadventure.tistory.com/411

반응형

유니티 리지드바디 통과 현상

유니티로 리지드바디를 별로 만져본적이 없어서 한참 해맸던 문제네요.

리지드바디를 달아놓고 MovePosition을 달아 놓고 움직임을 구현하는데

벽에 낑기거나 통과 되더군요.

왜 이런가 현상이 일어나나 궁금해서 인터넷에 검색해보니

리자드 바디의 Collision Detection 설정을 Continuous Dynamic으로 바꾸면 해결된다는 이야기가 있어서 설정을 바꿔 보았습니다.

이렇게 설정하고 실행을 해봤는데… 뭐 결과는 똑같이 통과되더라구요.

여기저기 찾아보다가 공식 홈페이지 글을 읽어보니 이런 글귀가 적혀있었습니다.

즉 박스, 구체, 캡슐 콜라이더에만 연속 충돌 검사가 적용 되고 매쉬 콜라이더엔 적용이 안된다는 모양입니다.

테스트를 해본 결과 충돌체 둘 중 어느 한쪽이라도 메쉬 콜라이더라면 통과되는 모양이더라구요.

저와 같은 문제로 고민하시는 분들을 위해 글을 남겨 봅니다….

(이것 때문에 몇 시간이나 날렸음 ㅠㅠ)

3 <벽 충돌> [유니티 2D 기초 강좌]

피하기 게임 만들기 (이전 강좌)

1. 프로젝트 세팅: https://doggie-development.tistory.com/7

2. 캐릭터 움직이기: https://doggie-development.tistory.com/8

안녕하세요, 취미로 유니티 강좌를 작성하고 있는 “멍멍은댕댕”입니다.

저번 시간에는 캐릭터를 움직이는 방법에 대해 배웠습니다. 이번 시간에는 캐릭터가 통과하지 못하는 벽을 만드는 법에 대해 배워보겠습니다.

준비물

1. 유니티 최신 버전 (저는 2019.2.2로 작업했습니다.)

2. 저번 시간까지 작업한 작업물

강좌를 PDF로 보고 싶다면? ↓↓↓↓↓

피하기게임_3.pdf 0.88MB

멍댕 유니티 강좌 첫 번째 시리즈!

이번에는 캐릭터가 통과하지 못하는 벽을 만들 것입니다.

Box 스프라이트를 Scene에 끌어다 넣어 오브젝트로 생성해주세요.

하지만 오브젝트를 생성했다고 해서 바로 통과할 수 없게 되는 것은 아닙니다.

아직 두 오브젝트는 그저 ‘그림’일 뿐이기 때문입니다.

하이어라키 창에서 Box 오브젝트를 선택해

인스펙터 창에 Box 오브젝트의 컴포넌트들이 보이도록 해주세요.

하단의 Add Component 버튼을 눌러 컴포넌트를 추가할 수 있습니다.

컴포넌트를 추가하여 새로운 특성을 줄 것입니다.

Physics 2D를 선택한 후, Box Collider 2D를 선택해주세요.

이러한 컴포넌트가 추가되었다면 성공입니다.

이 컴포넌트는 어떤 역할을 할까요?

네이버 영어사전에 따르면, Collide의 뜻은 “충돌하다, 부딪치다“입니다.

따라서 Collider은 “충돌하는 물체, 충돌체” 정도로 해석할 수 있습니다.

Box Collider 2D 컴포넌트는 단어의 의미와 같이 사각형 모양의 충돌체를 추가하는 것입니다.

그저 그림일 뿐이었던 오브젝트를 “충돌할 수 있는 물체“로 만드는 것이죠.

오브젝트를 선택하면 충돌 가능 범위가 초록색으로 보입니다.

충돌체가 다른 충돌체와 만나면 서로 충돌이 일어나, 통과할 수 없겠죠.

이런 원리로 벽을 만들 수 있습니다.

Player 오브젝트에도 Box Collider 2D 컴포넌트를 추가하여

벽과 플레이어가 서로 부딪칠 수 있도록 만들어줍시다.

그런데 이 상태에서도 캐릭터가 벽을 통과할 수 있습니다.

왜냐하면 충돌체는 추가했지만, 충돌을 계산하는 “물리엔진“을 추가하지 않았기 때문입니다.

플레이어 오브젝트에 “물리엔진“을 추가할 것입니다.

Physics 2D를 선택한 후, 스크롤을 내려 Rigidbody 2D를 선택해주세요.

이런 컴포넌트가 추가되었으면 성공입니다.

사실 Rigidbody의 뜻은 “강체“로, 물리학에서 말하는 이상적인 고체를 뜻합니다.

즉 “물리 법칙이 적용되는 강체“의 성질을 추가하는 것인데, 그냥 대충 물리 엔진을 추가한다고 생각하시면 됩니다.

그런데 재생을 해보면 키보드를 누르지 않아도 캐릭터가 아래로 서서히 떨어집니다.

마치 아래로 중력이 작용하는 것 같네요! 이유가 무엇일까요?

Rigidbody 2D에는 중력을 계산하는 속성까지 들어있기 때문입니다.

이외에도 엄청나게 많은 속성이 들어있지만, 자세하게 다루지는 않겠습니다.

Gravity Scale 값을 0으로 만들어 중력을 없애주세요.

그리고 Constraints를 누르면 접혀 있던 속성들이 나타나는데,

여기서 Freeze Rotation의 Z 값에 체크를 해주세요. (캐릭터가 빙글빙글 도는 것을 방지)

이제 실행을 해 보면 캐릭터가 벽을 통과하지…는 못하는데 어딘가 이상하네요.

왜 이렇게 덜덜 떨리는 것일까요?

이유가 복잡하므로 대강 설명드리자면,

‘움직임을 물리엔진을 이용해서 구현하지 않았기 때문’입니다.

캐릭터가 벽을 뚫지 못하도록 막는 것은 물리엔진에 의해 구현되는데, 캐릭터가 움직이는 것은 물리엔진이 아닌 그냥 Update 함수에서 직접 캐릭터의 위치를 변경하는 방식으로 구현되기 때문에, 둘이 궁합이 잘 맞지 않아서 이상한 모양새가 되는 것입니다.

따라서 물리엔진을 이용해 움직이게 하는 방법을 알려드리겠습니다.

위처럼 코드를 추가해주세요. 캐릭터를 움직이게 하는 세 번째 방법!

우선 move_method가 0일 때 실행되는 부분을 모두 선택하고, 복사해주세요.

그 다음 아까 추가한 move_method가 2일 때 실행되는 부분에 붙여넣어주세요.

그리고 위와 같이 맨 아래에 있던 코드를 삭제하고, 새 코드를 추가해주세요.

최종적으로 코드가 이렇게 되면 됩니다.

마지막 줄에 추가한 코드에 대해 설명해드리겠습니다.

Transform 이외의 대부분의 컴포넌트는 GetComponent를 통해 직접 컴포넌트를 가져와야 이용할 수 있습니다. 따라서 위와 같이 작성해야 합니다.

기존의 해당 코드는 오브젝트의 위치를 1프레임마다 직접 변경하는 것이었지만,

추가한 코드는 오브젝트의 Rigidbody2D 컴포넌트를 받아온 후, Rigidbody 2D에 들어있는 속도 속성(velocity)을 조절하여 물리엔진에 의해 위치가 변경되도록 하는 것입니다.

Move_method 값을 2로 변경하고 플레이를 해봅시다.

분명 움직이기는 하는데, 정말 느립니다. 왜 그럴까요?

Update 함수 안에서 Translate 함수로 직접 위치를 변경할 때는 “1프레임 당 속도“였지만, Rigidbody 2D에 들어있는 속성인 velocity는 “초속”을 말합니다.

60프레임이 약 1초이므로, 기존 속도보다 약 60배 느려진 것이죠.

Speed를 대강 5로 정하면 적당한 속도가 나옵니다.

그리고 박스에 부딛히면 박스를 뚫지 않고, 아주 적절하게 멈춥니다.

물리엔진을 통해 움직이도록 했기 때문이죠.

박스의 크기를 조절하여 벽을 만들어보세요.

Box 오브젝트를 복사 + 붙여넣기하며 원하는 형태로 맵을 만들어주면 됩니다.

충돌에 대해 배웠습니다.

다음 시간에는 충돌을 이용하여 아이템과 적을 만드는 법에 대해 알려드리겠습니다.

콜라이더 잘만 붙여놨는데 어쨰서 자꾸 통과하는거지?

매니저가 장기간(최소 10일 이상) 부재 시 부재중으로 표시되며, 다른 이용자에게 매니저의 책임과 권한이 위임될 수 있습니다.

매니저의 부재로 인해 운영에 지장이 있다고 판단될 경우, 다른 회원이 권한을 위임받아 마이너 갤러리를 운영할 수 있습니다.

위임 절차는 신고 게시판 > 분류 선택에 [매니저 위임]으로 위임받을 회원이 직접 신청하면 진행됩니다. 검토 결과 운영에 적합하다고 판단되는 회원에게 매니저 권한을 위임하게 됩니다.

벽 뚫기 방지

728×90

반응형

void Move() { if(!isBorder) transform.position += moveVec * speed * (wDown ? 0.1f : 1f) * Time.deltaTime; void FreezeRotation() { rigid.angularVelocity = Vector3.zero; } void StopToWall() { Debug.DrawRay(transform.position, transform.forward * 5, Color.green); isBorder = Physics.Raycast(transform.position, transform.forward, 5, LayerMask.GetMask(“Wall”)); } private void FixedUpdate() { FreezeRotation(); StopToWall(); }

레이케스트를 이용해 벽을 감지하고 이동을 멈춰 벽뚫림현상을 방지합니다.

어색하지 않도록 감지거리를 조절합니다.

728×90

반응형

[유니티 강좌 – 로보로보] 17. Rigidbody 와 Collider 를 이용한 제한 영역 만들기

유니티 물리 시스템 경험하기/ 난이도 중 / 경험치 10 획득

Rigidbody 와 Collider 를 이용한 제한 영역 만들기

오늘은, 유니티의 물리 (Physics) 기능을 이용하여, Player 오브젝트와 Floor 오브젝트간의 물리적 제한 영역을 만들고, Player 오브젝트가 뛰어 다닐 수 있는 제한 영역을 정하는 벽 오브젝트를 만들어 보도록 하겠습니다.

Rigidbody 컴퍼넌트와 Capsule Collider컴퍼넌트를 추가하여 중력 효과 주기

유니티에서는 물건이 하늘에서 떨어지거나, 바닥에 부딪히면 튕기거나 부서지는 등의 물리적 효과를 사용하기 위해서 RigidBody( 강체) 컴퍼넌트와 Collider (충돌체) 컴퍼넌트를 이용하게 됩니다.

플레이버튼을 눌러서 게임을 진행해 보면, 화면에 보시는 것처럼, 바닥 영역을 벗어나서도 Player 오브젝트가 이동을 할 수 있게 되어있습니다. 이러한 현상은 우리가 사는 실제 세계에서는 발생할 수 없는 현상입니다. 왜냐하면, 우리는 중력(Gravity) 이 존재하는 지구에서 살고 있기 때문입니다.

< 오잉?! 여긴, 어디 나는 누구?!> Player 오브젝트는 중력이 적용되지 않아 바닥 오브젝트를 벗어나도 공중에 떠있게 됩니다.

현재 사용하고 있는 유니티 엔진에는 중력이 존재합니다. 하지만, 단지 우리가 제작한 Player 오브젝트에는 그 중력값이 적용이 되지 않고 있기 때문에, 위 그림과 같이, Player 오브젝트가 공중에 떠있게 되는 것입니다. 따라서, 우리는 Player 오브젝트가 바닥 오브젝트를 벗어나면 아래로 떨어지게 하기 위해서 중력의 영향을 받게 할 것입니다.

중력의 영향을 받게 하기 위해선 RigidBody 컴퍼넌트를 Player 오브젝트에 추가해주면 됩니다.

아래그림과 같이 Player 오브젝트에 RigidBody 컴퍼넌트를 추가해줍니다. Add Component 버튼을 사용하여 추가해줄수 있습니다.

그러면, 아래 그림과 같이 Player 오브젝트에 Rigidbody 컴퍼넌트가 추가됩니다. Rigidbody 컴퍼넌트를 살펴보면, Mass (질량) , Drag(마찰력), Angular Drag(회전 마찰력), Use Gravity (중력 적용여부) 등의 항목이 보입니다.

우리는 Player 오브젝트에 중력을 적용시켜줄 것이기 때문에, 아래 그림과 같이 Use Gravity 를 체크해주고, Mass 와 Drag 등에 아래 그림을 참조하여 값을 적용해줍니다.

다음으로는, 위의 RigidBody 가 작용되는 영역, 즉 실제 충돌이나 물리적 값이 적용되는 영역(Boundary Condition) 을 유니티가 이해할 수 있게 정의해줘야 합니다. 충돌 경계 값을 만들어주기 위해선, Collider 계열의 컴퍼넌트를 추가해줘야 합니다. Add Component 를 활용하여, 아래 그림과 같이 Capsule Collider 를 추가해주겠습니다. Capsule Collider 는 말 그대로 캡슐 모양의 Collider 입니다.

유니티에서는 기본적으로 Box, Capsule, Mesh, Sphere 모양의 콜라이더를 제공하고있습니다. 가장 많이 사용되는 것은 Capsule 과 Box 모양의 콜라이더입니다. 상대적으로 충돌 판단이 정확하고 충돌 연산에 의한 처리지연이 적게 발생한다고 합니다.

그리고 아래 그림과 같이 Center 항목의 X,Y,Z 값을 넣어, Collider 의 중심 위치를 설정해주고, Radius (반지름) 값과 Height (높이) 값을 수정하여,모양 값을 변경하여 우리가 추가한 Capsule 모양의 Collider 가 Player 오브젝트를 커버해줄수 있게 설정해줍니다.

그러면, 아래 그림과 같이 Scene 탭을 통해서 화면을 살펴보면 녹색 실선으로 Player 오브젝트의 Collider 충돌 영역이 올바르게 표시되는것을 확인할 수 있습니다. 위의 Collider 컴퍼넌트의 수치를 변경하면, Player 오브젝트의 녹색 실선 영역이 변경되는 것을 확인할 수 있습니다.

이제, Player 오브젝트는, 유니티에 설정되어져있는 중력의 영향을 받게됩니다.

Floor 오브젝트에 운동 제한 영역 만들어주기

Player 오브젝트에 Rigidbody 컴퍼넌트와 Collider 컴퍼넌트를 추가하여, Player 오브젝트가 중력의 영향을 받게 하였습니다. 하지만, Floor 오브젝트에 기본적으로 Box Collider 컴퍼넌트가 존재하기 때문에 (Floor 오브젝트는 Box 오브젝트를 변형해서 만들었기때문에 기본으로 추가되어있습니다) 게임을 플레이해도, Player 오브젝트는 아래로 추락하지않고, 바닥위에 멈춰 서있게 됩니다.

따라서, Floor 오브젝트를 선택하고 Box Collider 를 삭제하거나 비활성화 시키고 게임을 플레이하면 아래 그림과 같이 Player 오브젝트가 바닥을 뚫고 떨어지는 모습이 연출이 됩니다.

<오오!! 나는 이제 중력의 영향을 받게 되었어!!! 그런데.. 왜.. 바닥에서 떨어지는 거니 ㅠㅠ>

그러므로, Floor 오브젝트가 Player 오브젝트가 뛰어다닐수 있는 바닥 역할을 하기 위해서는 따로 Collider 가 우선적으로 필요하게 됩니다. 하지만, 물리충돌을 제대로 구현하기 위해서 Floor 오브젝트에도 Rigidbody 컴퍼넌트를 추가한다면, 게임을 플레이할때, Floor 오브젝트도 중력의 영향을 받기 때문에, 바닥이 고정되지 않고, 같이 아래로 떨어지게 됩니다.

이 문제를 해결하기 위해서, Use Gravity 체크를 해제하면 어떻게 될까요?

이때에는 Floor 오브젝트는 중력의 영향을 받지 않기 때문에, 중력에 의한 자유낙하 운동을 하지 않지만, Floor 오브젝트 위에서 자유낙하 운동을 하는 Player 오브젝트의 영향으로 같이 추락하게 되는 문제가 발생합니다.

따라서, Floor 오브젝트는 절대적으로 위치를 유지하고 있어야 하는 “바닥” 역할을 해주는 오브젝트 이기때문에, 외부 힘에 의한 영향을 받지 않아야 합니다. 그래서 아래 그림과 같이 Rigidbody 컴퍼넌트의 Is Kinematic 체크를 해주면, 외부 힘에 의한 영향, 즉, Player 오브젝트의 자유낙하에 의한 영향을 받지 않기 때문에, 게임을 플레이해도 추락하지않고, Player 오브젝트도 Floor 오브젝트 위에 올바르게 서있게 됩니다.

아래와 같이 Floor 오브젝트의 Rigidbody 컴퍼넌트의 값을 변경합니다.

여기서, Floor 오브젝트의 Mass 값을 상대적으로 큰값을 넣어준 이유는, 물리적 충돌 값을 계산할때, 바닥이 Player 오브젝트에 비하여 훨씬 큰 질량을 갖는 오브젝트이기 때문입니다.

그리고 게임을 플레이하고 키보드 조작을 이용하여, Player 오브젝트를 이동시켜보면, 처음과는 달리 Floor 오브젝트가 존재하지 않는 영역에서는 자유 낙하를 하게 되는 Player 오브젝트 를 볼 수 있습니다.

<으하하, 드디어, 이제 바닥을 벗어나면 떨어지는구나!!! 그런데.. 그런데.. 어지럽다.. 왜 옆으로 떨어지지?>

Constraints 옵션을 이용하여 물리운동 제한 방향 만들어주기

이번에는 Player 오브젝트의 Rigidbody 컴퍼넌트 값중 Constraints 옵션을 변경해서, 앞서 Player 오브젝트가 자유낙하를 할때, 위 그림과 같이 뱅글 돌면서 떨어지지 않고, 아래로 곧장 떨어지는 연출을 해보도록 하겠습니다.

아래와 같이 Player 오브젝트의 Rigidbody 컴퍼넌트 의 추가 옵션을 설정해줍니다.

그러면, 아래 그림과 같이 Floor 오브젝트가 존재하지 않는 영역에서 정자세로 추락하는 Player 오브젝트를 확인할 수 있습니다.

Constraints 옵션은 물리 충돌에 의해서 힘이 발생하는경우, 체크한 좌표의 물리적 영향이 발생하지 않게하는 기능입니다. 위 에서 우리가 설정한 Constraints 옵션대로라면, x,y,z 포지션상의 물리적 움직임은 발생할 수 있지만, 회전 운동은 발생하지 않고 원래부터 초기 움직임이 유지 되게 됩니다.

Box Collider 를 활용하여 Wall 오브젝트 만들어주기

이번에는 위에서 배운 Collider 의 제한 영역 기능을 활용하여, Floor 오브젝트의 외곽에 Player 오브젝트의 이동을 제한하는 Wall 오브젝트를 만들어서, Player 오브젝트가 아래로 떨어지지 않게 만들어보겠습니다.

먼저 GameObject 메뉴로 들어가서 새로운 Cube 오브젝트 를 만들어줍니다.

그리고, 아래와 같이 이름을 Wall 이라고 바꿔줍니다.

그리고, 아래와 같이 Trasform 컴퍼넌트의 값을 입력해줍니다.

그리고 프로젝트 탭의 2_Resources 폴더에 아래 그림과 같이 MatWall1 이라는 새로운 매터리얼을 만들어주고, Tile1 텍스쳐 를 적용해줍니다.

그리고, 하이러키 탭의 Wall 에 적용해주면, 씬 탭에서 아래와 같은 모습을 볼 수 있습니다.

그리고 플레이를 눌러서 Player 오브젝트 를 추가한 Wall 방향으로 이동해보면, 뚫고 나가지 못하고 부딪히는 것을 볼 수 있습니다.

Wall 오브젝트에는 Rigidbody 컴퍼넌트 가 없고, Box Collider 컴퍼넌트 만 존재합니다. Collider 컴퍼넌트만 존재해도 물리적 충돌을 위한 경계값 이 존재하기 때문에, Player 오브젝트 는 Wall 오브젝트 를 뚫고 나가지 않게 되는 것입니다.

Wall 오브젝트를 복제 (Duplicate) 하여 나머지 방향도 막아주기

자, 이제 이렇게 만든 Wall 을 활용해서 다른 3방향에도 Wall 을 만들어주도록 하겠습니다. Wall 오브젝트에 마우스 오른쪽 클릭후 Duplicate 를 클릭하거나 단축키 Ctrl + D 를 하면 Wall 오브젝트를 복제할 수 있습니다.

이렇게, Wall 오브젝트를 복사해서 만들어진 wall 오브젝트들의 Transform 컴퍼넌트 수치를 변경해서 아래 그림과 같이 4방향을 막는 Wall 오브젝트 들을 만들어줍니다.

그러면 아래 그림과 같이 4방향을 이쁘게 막고 있는 Wall 오브젝트가 생기게 됩니다.

Collider 의 Size 값을 변경해서 물리적 오류 해결하기

이렇게 벽을 설치 해주고 플레이를 해보면 기본적으로는 4방향의 Wall 오브젝트들이 Player 오브젝트가 Floor 밖으로 나가지 않도록 막아주지만, 4방향의 구석부분에서 열심히 달리다보면, 아래 그림과 같이 벽을 뚫고 가버리는 문제가 발생 합니다.

<으하하, 벽따위야 그냥 넘어가 주마!!>

이러한 문제는, Collider 와 Collider 가 만나는 경계 부분에서 제대로 물리적 제한 처리가 되지 않아서 발생하게 됩니다. 따라서, 상대적으로 길이가 짧은 1번 Wall 오브젝트 와 3번 Wall 오브젝트 의 Box Collider 컴퍼넌트 값을 아래와 같이 수정해줍니다.

<1번, 3번 Wall 오브젝트의 Box Collder 컴퍼넌트 수치값 변경전 >

<1번, 3번 Wall 오브젝트의 Box Collder 컴퍼넌트 Size 값 변경 >

<1번, 3번 Wall 오브젝트의 Box Collder 컴퍼넌트 수치값 변경후 >

그리고 Floor 오브젝트의 Box Collider 컴퍼넌트의 값도 아래 그림과 같이 변경해줍니다.

이렇게 Wall 오브젝트의 Collider 를 수정해주면, 모든 방향을 촘촘하게 막아주므로, 아래 그림과 같이 Player 오브젝트가 열심히 구석에서 달려도, 벽을 뚫지 않는 것을 볼 수 있습니다.

오브젝트 그룹화 작업 과 Static 체크

같은 이름의 배경 오브젝트가 많아지만, 나중에 작업을 할 때 많이 복잡할 수 있습니다. 따라서, 빈 게임오브젝트를 활용하여 정리하는 습관을 들여놓으면 좋습니다.

오브젝트를 그룹 처리 하기 위해서 아래 그림과 같이 Game Empty 를 새로 생성해서 Buildings 라고 이름을 변경해 Floor 오브젝트를 하위로 끌어다 넣어주고 Game Object 를 또 추가해서 Walls 라고 이름을 변경해주고, Wall 들을 하위 오브젝트 로 정리해줍니다. 그리고 Walls 오브젝트도 Buildings 에 하위 오브젝트로 넣어줍니다.

이때, Empty GameObject 로 오브젝트를 제작하게 되면, 꼭, Transform 컴퍼넌트의 우측 상단의 기어 모양의 아이콘을 눌러서 나오는 Reset 기능을 활용하여 Transform 값을 초기화 시켜줘야 합니다.

다음으로는, 배경 오브젝트를 Static 처리하는 것을 배워보도록 하겠습니다. 정리된 Buildings 오브젝트를 선택하고 아래 그림과 같이 우측의 인스펙터 창의 Transform 컴퍼넌트 우측 상단에 있는 Static 왼쪽의 박스를 체크해줍니다.

Static 체크는 해당 화면상에서 움직임이 발생하지 않는 오브젝트로 분류를 시켜줘서, 불필요한 연산이 일어나지 않게 하여, 최적화 하는데 도움을 주는 역할을 해줍니다. Buildings 에 속하는 오브젝트들은 움직임이 발생할 일이 없음으로, Static 체크를 해줍니다.

Static 체크를 하면, 아래 그림과 같이 팝업 메뉴가 뜨게 되는데 좌측의 “Yes, change children” 을 선택해줍니다. 이 선택은, Buildings 에 속하는 모든 오브젝트들을 static 처리를 해주겠다는 의미입니다.

오브젝트 다중 선택을 통한Tag 설정 작업

마지막으로, 앞서 배웠던 Add tag 기능을 사용해서, Building 과 Buildings 에 속해있는 오브젝트들에 Building tag 를 설정해줍니다.

이때, 아래 그림과 같이 Ctrl 키를 이용하여 다중 선택이 가능합니다.

이제, Buildings 에 속하는 오브젝트들에게 building 태그가 부여되었습니다.

다음| 18. Enemy Prefabs 를 활용하여 Enemy 오브젝트 만들기

키워드에 대한 정보 유니티 벽 통과 방지

다음은 Bing에서 유니티 벽 통과 방지 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45]

  • 유니티
  • 유니티강좌
  • 유니티기초
  • 유니티기초강좌
  • 유니티개발
  • 유니티개발강좌
  • 유니티3D
  • 유니티3D강좌
  • 유니티3D기초
  • 유니티2D
  • 유니티2D강좌
  • 유니티2D기초
  • 도트
  • 도트게임
  • 도트게임만들기
  • 도트게임개발
  • 픽셀아트
  • 픽셀아트게임
  • 픽셀아트게임만들기
  • 픽셀아트게임개발 게임개발
  • 게임개발툴
  • 프로그래밍
  • 게임프로그래밍
  • 게임그래픽
  • 슈팅게임
  • 슈팅게임만들기
  • 슈팅게임개발
  • unity
  • unity3d
  • game
  • gamedevelopment
  • gamedev 유니티에셋
  • 유니티에셋
  • 에셋스토어
  • 튜토리얼에셋
  • 쿼터뷰 게임
  • 쿼터뷰 게임 만들기

3D #쿼터뷰 #액션게임 #- #플레이어 #물리문제 #고치기 #[유니티 #기초 #강좌 # #B45]


YouTube에서 유니티 벽 통과 방지 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 3D 쿼터뷰 액션게임 – 플레이어 물리문제 고치기 [유니티 기초 강좌 B45] | 유니티 벽 통과 방지, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  귀 청소 하는 꿈 | 耳掃除 귀 청소 Ear Cleaning #268 모든 답변

Leave a Comment