UnityのProbuilderでオブジェクトを分解する

Unity

説明

Unityでアクションゲームなどを作成するときに、樽などのオブジェクトを叩くと樽が割れて、アイテムGETみたいなシーンを作りたくなると思います。

そのためには、樽オブジェクトを良い感じに前もって分解しておかなければなりません。既にBlenderなどのツールを使ってる方もいると思いますが、今回はUnityの「Probuilder」というパッケージを使って行っていきたいと思います。

環境

・Unity 2019.4.8f
・Probuilder 4.23

Probuilderのインストール

ProbuilderはUnityのパッケージマネージャーからインストールできる無料ツールです。普段はマップや小物などのオブジェクトを作成するときに使います。

上部メニュー→Windoes→PackageManager→Probuilder→Installボタンを押す

Probuilderの基本操作

こちらのYouTubeで確認してみてください。本記事では、基本操作は省きます。

樽オブジェクトを設置する

①. AssetStoreでこちらのものを使います。こちらを入手してください。

②. シーンに空オブジェクト「Barrels」を設置します。

③. Assetsの「Mega Fantasy Props Pack → Prefabs → Miscellaneous → Barrels → barrel」を②の空オブジェクト「Barrels」の中に放り込んで、樽を設置します。

カスタムシェーダー・マテリアルを作成

普通にオブジェクトを分解すると、裏側にはマテリアルはついておりません。

オブジェクトを分解する前に、シェーダーとマテリアルを新しく作りましょう。

①. Assets→右クリック→Create→Shader→Standard Surface Shaderで、NewSurfaceShaderを作ります。

②. NewSurfaceShaderをVSCodeで、

Shader "Custom/NewSurfaceShader" {
    Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Front (RGB)", 2D) = "white" {} 
    _BackMainTex("Back (RGB)", 2D) = "white" {} 
}
SubShader {
    Tags { "RenderType"="Opaque" }
    LOD 200

    Lighting On
    Cull Back // 表面

    CGPROGRAM
    #pragma surface surf Lambert

    sampler2D _BackMainTex; 
    fixed4 _Color;

    struct Input {
        float2 uv_BackMainTex;
    };

    void surf (Input IN, inout SurfaceOutput o) {
        fixed4 c = tex2D(_BackMainTex, IN.uv_BackMainTex) * _Color;
        o.Albedo = c.rgb;
        o.Alpha = c.a;
    }
    ENDCG

    Cull Front // 裏面

    CGPROGRAM
    #pragma surface surf Lambert

    sampler2D _MainTex;
    fixed4 _Color;

    struct Input {
        float2 uv_MainTex;
    };

    void surf(Input IN, inout SurfaceOutput o) {
        fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
        o.Albedo = c.rgb;
        o.Alpha = c.a;
        o.Normal =float3(0,0,-1);   // 裏面は法線の方向を逆にしないと、光を当てても暗いまま
    }
    ENDCG
}
Fallback "Diffuse"
}

光を意識した場合法線の処理が必要です。o.Normal = float3(0, 0, -1)

③. 樽のマテリアル(dark_iron, timber_1_fixed_dark, wood_1_dの3つ)をコピー(新規作成)する

④. 新規で作成した、マテリアルのShader設定と、裏側にテクスチャを設定する

⑤. 分解する樽オブジェクトに、新しくマテリアルを割り当てればOK!

樽オブジェクトを分解する

①. 上部メニュー→Tools→Probuilder→Probuilder Windowをクリック

②. Hierarchyでbarrelオブジェクトを選択、Sceneのオブジェクト(4つあるアイコンの一番左)を選択、Probuilderの「Probuilderize」をクリック

③.すると、オブジェクトがいじれるようになります。

④. Sceneの面(4つあるアイコンの一番右)を選択、樽オブジェクトのシフトを押しながら、いくつか面を選択し、Probuilderの「Detach Faces」をクリックをクリックすると、オブジェクトが分解されます。

⑤. 面を選択するのがめんどくさい時は、面をひとつ選択したあと、「Select Face Loop」もしくは「Select Face Ring」をクリックすると、まとめて面が選択できます。その後、「Detach Faces」をクリックすれば、同様に分解できます。

⑥. これを繰り返していきます。

確認してみる

分解した、すべてのオブジェクトに、

①. Add Component で、Rigidobodyを設置

②. Add Component で、Mesh Colliderを設置後、Convexにチェック

③. 再生する

以上です。

コメント

タイトルとURLをコピーしました