ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티 3D Model 파괴 효과 만들기
    Unity 2024. 2. 26. 00:09

    Unity로 건물이나 3D Model이 부서져 무너지는 효과를 만드는 방법

     

    Probuilder Package를 이용해 건물이 부서졌을때 조각나는 부위의 GameObject들을 만들고 건물이 부서지면 미리 조각해놓은 오브젝트로 대체해버리는 방식

     

    Probuilder Package로 건물을 조각낼때 조각낼 부위를 Cube GameObject를 사용해 범위를 지정해줄수 있음

    건물이 무너지며 폭발하는 효과

    - Probuilder 설치

    Unity Package Manager에 가서 Probuilder를 설치, 필자의 경우 Probuilder 5.0.7 version을 사용

    부서질 모델 오브젝트에 Probuilder MeshFilter Component를 추가할 예정

     

    - Probuilder MeshFilter 추가

    오브젝트가 부서졌을 때 조각난 오브젝트들을 만들기 위해, 부서질 오브젝트에 Probuilder MeshFilter를 추가

    - 부서질 오브젝트의 Mesh Component가 있는 GameObject를 선택

    - Tools > Probuilder > Probuilder Window 선택

    Tools > Probuilder > Probuilder Window
    Probuilderize

    - Probuilder Window에서 Probuilderize를 선택하여 Mesh가 포함된 게임오브젝트에 Probuilder MeshFilter를 추가

    Probuilder MeshFilter

     

    - 3D Model을 자르기 위한 Cube 생성

    3DModel의 자르고자 하는 부위에 Cube를 생성

    Cube 또한 위와 같이 Probuilder MeshFilter를 설정해 줘야 함

    Cube Object에도 Probuilder MeshFilter Component를 추가해줘야 함

     

    - 조각낼 범위를 Cube GameObject를 이용해 잡아줌

    Cube GameObject를 이용해 조각낼 부분의 범위 잡기

    - 3D Model 조각내기

    3D Model을 조각내기 위해선 Probuilder의 Experimental Features를 enabled 해야 함

    Experimental Features Enabled 체크

    - Unity > Preferences > Probuilder 로 들어가 Experimental Features Enabled를 체크

    - Tools > Probuilder / Experimental > Boolean(CSG) Tool 로 이동해 자르기 시작

    Boolean (CSG) Tool

    - Probuilder MeshFilter Component를 가진 3D Model과 Cube를 양쪽에 Drag하여 수행

    - 자르고자 하는 Model을 왼쪽에 자르는 범위를 설정하는 Cube는 오른쪽에 놓음

    CSG

    - Operation을 선택할 수 있음

         - Intersection: Cube와 3D Model이 겹쳐진 부분의 3D Model 생성

         - union: 두 오브젝트를 하나로 합침

         - subtraction: Cube와 3D Model이 겹쳐진 부분이 제거된 3D Model 생성

    Cube로 선택한 부분이 짤려져 새로운 GameObject로 생성

     

    - 새로 생성된 Model이 Camera의 방향에 따라 보여지지 않는 Issue가 있을 수 있음

    - Probuilder Window로 이동하여 Vertex Selection 선택

    - SetPivot를 클릭 하면 해당 이슈는 해결 됨

    Set Pivot

     

    - 파괴효과 만들기

    - 멀쩡한 3D Model과 위 방식을 이용해 파괴되었을때 쪼개진 게임오브젝트들을 가진 GameObject를 준비

    - 쪼개진 게임오브젝트들을 가진 GameObject는 멀쩡한 3D Model 게임오브젝트와 Pivot의 위치를 똑같이 맞춰줌

    - Intersection으로 자른 조각들에 Mesh Collider Component추가 후 Convex 활성화

    MeshCollider추가 및 Convex Property 활성화

     

    - Intersection으로 자른 조각 GameObject에 Rigidbody Component도 추가

     

    오브젝트가 파괴되었을때 원본 3D Model은 비활성화 혹은 Destroy 하고 조각난 게임오브젝트들을 가진 GameObject로 대체한 후 AddExplosionForce 함수로 힘을 준다

     

    [SerializeField] private Transform pfBrokenObject;
    
    public void DestroyObject()
    {
        Transform brokenObjectTransform = Instantiate(pfBrokenObject, transform.position, transform.rotation);
        brokenObjectTransform.localScale *= 4f;
    
        foreach(Transform child in brokenObjectTransform)
        {
            if (child.TryGetComponent<Rigidbody>(out Rigidbody childRigidbody))
            {
                childRigidbody.AddExplosionForce(100f, transform.position, 5f);
            }
        }
    
        gameObject.SetActive(false);
    }

    'Unity' 카테고리의 다른 글

    Unity 3D Object Drag & Drop  (0) 2024.06.04
    Unity Design Pattern - Object Pool  (2) 2024.06.03
    Unity Android Plugin 만들기  (2) 2024.01.28
    Mac에서의 classes.jar 위치  (0) 2021.10.31
    [Unity] Animator Animation 재시작 방법  (0) 2021.10.29

    댓글

Designed by Tistory.