유니티

유니티 3D 쿼터뷰 액션게임 - Player 물리문제 고치기 / 벽 관통 방지 / 아이템 고정

nock_ji 2022. 4. 23. 16:11

유니티 3D 쿼터뷰 액션게임 만들기

 

 

👾  Player 물리문제 고치기  👾

 

 

 


 

1.  자동회전 방지

 

✏️ 오브젝트에 밀려나서 Player 스스로 회전하는 것 

외부 충돌에 의해 Rigidbody 의 회전 속력이 발생 

 

 

FixedUpdate() 함수와 함께 새로운 함수도 선언하여 호출 

📌 AngularVelocity : 물리 회전 속도 

 

FixedUpdate()에서 꾸준히 회전 속도를 0으로 만들기 때문에 스스로 도는 행동은 일어나지 않음

 

 

 


 

2. 충돌 레이어 설정 

 

✏️ Player가 인터렉션이 없는 오브젝트랑 충돌하지 않도록 설정 

 

🔻 충돌 설정할 Layer들을 추가

 

 

 

 

📌 Layer Collision Masks

레이어들의 상호간 충돌 설정

 

-BulletCase는 Floor, BulletCase와만 충돌

-PlayerBullet은 Player만 충돌 제외 

 

체크해제된 Layer끼리는 충돌하지 않음 (이벤트 포함)

 

 


 

3. 벽 관통 방지 

 

 

✏️ Player가 벽을 관통하지 못하도록 설정 

 

📌 DrawRay()

Scene내에서 Ray를 보여주는 함수 (시작위치 , 쏘는 방향 * ray길이 , 색 )

 

 

 

 

 

🔻 벽 충돌 플래그 bool 변수를 생성 

bool Bordering

 

 

 

📌 Raycast()

Ray를 쏘아 닿는 오브젝트를 감지하는 함수 

Wall 레이어마스크를 가진 물체의 충돌을 감지하면 Bordering이 true로 바뀜

Player logic.

 

-플래그변수를 이동제한조건으로 활용하기

-회전은 회전대로, 이동은 이동대로 막음 

Player logic.

 

🔻 벽 오브젝트 마찬가지로 고유 레이어를 만들어 적용

 

 

 


 

4. 아이템 충돌 제거

 

✏️  물리 충돌을 담당하는 Collider와 충돌하여 문제가 발생한다 

 

 

 

 

- OnCollisionEnter()함수에서 변수를 호출하여 물리효과 변경

- GetComponent()함수는 첫번째 컴포넌트를 가져옴 

📣 즉, 물리를 담당하는 Collider가 Inspector창의 가장 위에 있어야함

- MoveUp으로 물리효과를 담당하는 Collider를 위로 올리기