본문 바로가기
게임 만들기/파쿠르 용사

Rigidbody 객체가 떠 있는 상태에서 충돌했을 때 밀림문제 해결 방법

by 레오란다 2023. 4. 27.
반응형

이번 글에서는 파쿠르 용사를 만들면서 경험했던 문제점에 대한 해결 방법에 대해 다뤄보도록 하겠습니다. 

 

문제점

파쿠르 용사에서 보스들의 기본 패턴에 점프가 있습니다. 보스가 플레이어 캐릭터보다 크기 때문에 보스와 용사가 충돌했을 때 보스가 밀리는 건 자연스럽지 않습니다. 보스와 용사가 모두 땅에 있을 때는 보스의 Rigidbody 컴포넌트에 있는 mass 값을 더 크게 설정하면 보스가 밀리지 않게 할 수 있습니다. 하지만, 보스가 떠 있는 경우에는 이 mass 값에 상관없이 뒤로 밀려 버리는 문제가 발생합니다.

 

공중에서 밀림
덩치에 어울리지 않게 맥없이 밀려버리는 보스

 

이러한 물체가 발생하는 이유는 용사와 보스 모두 가속도를 갖고 떠 있는 상태에서 충돌하기 때문에 물리엔진에 의해서 보스도 뒤로 밀려 버리는 현상이 발생하게 됩니다. 하지만 mass 값이 훨씬 큰 boss 가 저렇게 맥없이 밀려 버리는 현상은 유니티 물리엔진의 특성인 것인지 버그인 것인지는 알 수 없습니다.

 

해결 방법

이러한 문제는 다음과 같이 스크립트를 작성해 어느정도 해결할 수 있습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class BossMonster : Monster
{
   var rig = GetComponent<Rigidbody>();

   private void OnCollisionEnter(Collision collision)
   {
      if (collision.gameObject.layer == LayerMask.NameToLayer("Player"))
      {  
         // 보스 캐릭터를 고정시키기
         rig.constraints = RigidbodyConstraints.FreezeAll;         
      }
   }

   private void OnCollisionExit(Collision collision)
   {
      if (collision.gameObject.layer == LayerMask.NameToLayer("Player"))
      {  
         // X 와 Y 축만 constraints 를 풀어줍니다.
         rig.constraints = RigidbodyConstraints.FreezeRotation | RigidbodyConstraints.FreezePositionZ;
      }
   }   
}

 

이렇게 하면 완벽하진 않지만 최소한 보스가 힘 없이 밀리는 현상은 방지할 수 있습니다.

 

공중에서도 보스가 더 이상 밀리지 않습니다.

반응형

댓글