BlenderとUnityで作ったものをVR(Oculus  Quest/Oculus Link)で動かします

【Unity】Terrainのデータ全部を別のプロジェクトにコピーする方法

 
諸事情で、1年ほど使っていたプロジェクトの中身全部を「新たに作ったプロジェクト」にコピーする必要がありました。
 
自分で作った3Dモデルや配置したアセットはPrefab化してD&Dするだけなんですが、地面や山として作った「Terrainデータ」はそれだけではうまくコピーできませんでした。どうやら、他にも必要なデータがあるようです。
 
いろいろ調べてコピーできるようになったので、忘れないよう記事にしておきます。



5種類のファイルをコピーしました

私が作成したTerrainの場合、以下の5種類のファイルがポイントでした。
 
(1) TerrainのLayer
(2) 木や草花のアセット
(3) Terrain Data
(4) TerrainのMaterial
(5) TerrainのPrefab
 
今回は、こんな感じのTerrainデータを他のプロジェクトにコピーしていきます。
池の水面や建物・橋は別ですよ。
 

1.「Layer」ファイルの場所を探す

まずは、Terrainの「Layer」ファイルを探しましょう。土や草のテクスチャなどのデータを保存してるファイルですね。
 
TerrainのInspectorで、「Terrain -> Paint Terrainボタン -> Paint Texture」を選択し、「Terrain Layers」一覧で「土や草などのLayer」を選択した後で、「Open」ボタンをクリックします。
 
すると、Projectビューで「Layerのファイル」が選択されました。
ファイルの場所を覚えておきましょう。
 
今のプロジェクトでは、「Assets/Scenes/Materials/NewLayer」にありました。他のファイルもそうですが、プロジェクトや作り方によって場所やファイル名は違うと思いますよ。
 
「草のLayer」は同じフォルダに「NewLayer1」という名前でありました。
確かにそんな名前で保存した記憶があります。にしても、名前が適当すぎましたね。。。
もっと分かりやすい名前にしておけば探しやすかったかも知れません。
 
ちなみにですが、Terainのエリアが複数ある場合、具体的に言うと、「Create Neighbor Terrains」ボタンでTerrainエリアを追加してた場合、それぞれでファイル場所を確認しておきましょう。
 

2.「Terrain Data」ファイルの場所を探す

次は、「Terrain Data」です。地面や山の地形データが保存されています。
 
TerrainのInspectorの一番下に、「Terrain Collider -> Terrain Data」がありますので、設定されているデータをクリックすると、ファイルの場所が分かります。
名前は「New Terrain」でした。
 
別のTerrainエリアで確認してみると、「TerrainData_317de88e-0e32-4e80-a1e1-a0c80dbf7836」という名前でした。
こちらは、自動生成された名前っぽい。
 
なお、Terrain Collider内に「Material」という設定があります。今回のプロジェクトでは「None (Physic Material)」となってましたが、もし何かが設定されているのであれば、そのファイルも「7. Terrainデータをエクスポートする」の対象にしましょう。
 


3.「木のPrefab」の場所を探す

次は、Terrainで植えた「木のPrefab」の場所を探します。Terrainでは、自分の好きな木が使えるので便利ですね。
 
Terrain -> Paint Treesボタン」を選択し、「Trees」一覧で「木のオブジェクト」を選択した後で、「Edit Trees…」ボタンをクリックします。
 
メニューで「Edit Tree」をクリックします。
 
Edit Tree」画面で、木のPrefabをクリックします。今回は、「Broadleaf_Mobile」と表示されている個所ですね。
 
すると、Projectビューで、「木のPrefab」ファイルが選択されました。
名前を見てみると「Standard Assets」となってました。これはUnity社が無料で配布しているアセットです。
 
アセットであれば、新しいプロジェクト側で「Asset Store」でダウンロード&インポートすれば良いので、いまのプロジェクトからエクスポートする必要は無いですね。
 

4.「草のPrefab」の場所を探す

同じ要領で、「草のPrefab」も探します。
 
Terrain -> Paint Detailsボタン」を選択し、「Details」一覧で「のオブジェクト」を選択した後で、「Edit Details…」ボタンをクリックします。
後は同じです。メニューで「Edit」をクリックして、草のPrefabをクリックすると、Projectビューでファイルの場所が分かります。
 
これは「GrassFlowers」というアセットでした。これも新プロジェクトでインポートするだけでOKです。
 

5.「Material」ファイルの場所を探す

次は、「Material」のファイルです。
 
Terrain -> Terrain Settingsボタン」を選択し、「basic Terrain -> Material」で現在設定されている Material をクリックすると、ファイルの場所が分かりました。
 
ここまでの作業で、Terrainのコピーに必要なファイルの場所がすべて分かりました!
 


6. Terrainの「Prefabファイル」を作成する

次は、TerrainのオブジェクトをPrefab化していきます。
 
Hierarchyビューで「Terrainのオブジェクト」を選択し、Projectビューの適当な場所にD&Dします。
 
これで、同じ名前の「Terrain1」というファイルができました。
これが「Prefabのファイル」ですね。
 

Prefabへのリンクを解除する

ここで、一つ作業をやっておきます。
 
先ほどD&Dしたことで、「Project上のPrefab」と「Hierarchy上のオブジェクト」がリンクされた(紐づいた)状態になってます。この状態で「Project上のPrefab」を削除してしまうと、「Hierarchy上のオブジェクト」や中のプロパティなどが「Missing状態(ファイルが見つからない)」になってしまいます。
 
同じオブジェクトを複数配置したい場合は「Prefab化」はとても便利な機能ですが、今回はそういう用途では使いませんので、忘れないうちにリンクを解除しておく方が安心です。
 
リンクを解除するには、Hierarchyビューで先ほどD&Dに使った「Terrainのオブジェクト」を選択し、右クリックメニューで「Unpack Prefab Completely」をクリックします。
オブジェクトのアイコンが青色から白色に変わりましたね。これでリンクが解除されました。
 

7. Terrainデータをエクスポートする

ここまでの作業で下準備が完了してますので、Terrainデータをエクスポートしていきます。
 
Projectビューで、エクスポートしたいフォルダを右クリックして、メニューで「Export Package…」をクリックします。
 
次に、これまでの調査で分かった「Terrainのデータとなるファイル」をすべて選択し、「Export…」ボタンをクリックします。
 
今回のプロジェクト(Terrain1のみ)の場合、以下にチェックを入れました。
・NewLayer1.terrainlayer  ※1.で見つけた「Terrain Layers」ファイル
・NewLayer.terrainlayer  ※1.で見つけた「Terrain Layers」ファイル
・New Terrain.asset  ※2.で見つけた「Terrain Data」ファイル
・New Terrain Material.mat  ※5.で見つけた「Material」ファイル
・Terrain1.prefab  ※6.で作成したPrefabファイル
 
適当なファイル名を付けて保存しましょう。
 

8. 新しいプロジェクトを作る

Unityで新しいプロジェクトを作成します。
 
Unity Hubを使うと、プロジェクトの管理が楽で良いですね。
 
テンプレートは「Universal Render Pipeline」を選択してみました。
 
サンプル用のファイルは削除しておきましょう。
 
すっきりしました。
 


9. 事前に必要なアセットを入れる

3.」と「4.」で見つけた「木と草のアセット」を事前にインポートしておきます。
 

木のアセット「Standard Assets」

まずは、木のアセットがある「Standard Assets」ですね。
 
for Unity 2018.4」とあるように、少し古めのアセットですので、必要なファイルのみにしてみました。
 
今回の場合、「Environment」フォルダ以下があれば大丈夫でしょう。
 

草のアセット「Grass Flowers Pack Free」

同じ要領で、草のアセット「Grass Flowers Pack Free」をインポートします。
 
ファイル数が少ないので、全部を入れておきます。
 
これでTerrainに必要なアセットをインポートできました。
 

10.「Terrainのunitypackageファイル」をインポートする

7.」で作成した「Terrain1.unitypackage」ファイルをダブルクリックか、UnityにD&Dします。
 
すべてのファイルにチェックが入っていることを確認して、「Import」ボタンをクリックします。
 
Projectビューに「Terrain1」というファイルができているので、このファイルを「Hierarchyビュー」にD&Dします。
 

Fog設定を変更する

これで、Terrainデータがコピーできた!と思いましたが、Terrainの地面や山が見えません。。。
 
どうやら、新しく作ったプロジェクトではFog(霧)が設定されてるので見えなかったようです。
 
とりあえず「Lightingタブ -> Other Settings -> Fog」のチェックを外してみましょう。
 
他のプロジェクトで作った「Terrainの地面や山」が表示されました!
Fogを使い続けたい場合は、Densityの値を小さくするだけでも良いですね。
 
地面を拡大してみると、Terrainの木がすべてピンク色になってました。
 

うまくコピーできなかった場合

これまでの方法でうまくコピーできなかった場合、何かファイルが足りないのかも知れません。
 
この記事で紹介したファイルを再度確認しつつ、他にもファイルが設定されていないかを確認してみてくださいね。
 

11.「Terrainの木」のシェーダーを変更する

ピンク色の原因は「木のアセット内のシェーダー」が今のプロジェクトとあっていないから。
 
そういえば先日、シェーダーをURPに切り替えてましたね。
 
シェーダーを変更していきましょう。
 
新しいプロジェクトでは、URP対応のシェーダーに変更します。
 
正しい色で表示されるようになりました。
 


Terrainデータがコピーできた!

これで、Terrainデータを新しいプロジェクトにコピーすることができました!
地面には草もはえてますね。
 
もちろん、新しく作ったプロジェクトでも、Terrainを使って山や木が作れますよ。
 

まとめ 

Terrainのデータを別のプロジェクトにコピーすることができました。
 
一番最初に試した時はうまくコピーできず、「イチからTerrainを作り直すのはめんどくさい。。。」と思ってましたので、無事にコピーできて本当に良かったですよ。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

ブログの女の子を作る #55 MToonシェーダーからURP用UTS/UniversalToonに変更する (2) 問題解決編

ブログの女の子を作る #56 Unity用の「RealToon」トゥーンシェーダーをURP版で使ってみる

最近のコメント

だーしゅ
IT関係のお仕事してます。
VRは楽しいですね。

[当ブログについて]