ミニゲームを作ってUnityを学ぶ！  [ タンクウォーズ編 - 1. 地面と戦車を配置する ]

[ミニゲームを作ってUnityを学ぶ！[タンクウォーズ編]](https://qiita.com/YzRoid/items/544426ceffd4283d6977)
###**第1回目: 地面と戦車を配置する**

![tankwars_ss_1_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/d7bbed37-4799-b8f8-529c-6cefeef6ec6f.jpeg)

#新規プロジェクト
Unityプロジェクトを新しく作成します。
**3Dにチェック**が入っているのを確認したら名前を決めて新規プロジェクトを作成。

+ **プロジェクト名:** CsgTankWars
+ **画面比率:** FreeAspect
+ **エディタレイアウト:** 2by3でProjectウインドウをOneColomnに変更

<font color="Blue">↑このあたりは自分の使いやすいように変更してください。</font>



#使用する3Dモデルとテクスチャ
ゲームに必要な3Dモデルとテクスチャをアセットストアから探してインポートします。

今回は**戦車自体の移動と独立して砲台部分を回転させたい**ので、「戦車本体と砲台が別個のパーツになっている戦車モデル」と「地面として使用できるテクスチャ」を探しました。

適当に「Tank」や「Sci-Fi」などの単語で検索した中から選んだのが以下の2点。
どちらも無料です。

+ [戦車モデル（Kawaii Tanks）](https://assetstore.unity.com/packages/3d/vehicles/land/kawaii-tanks-free-version-1-1-54604)
+ [地面用テクスチャ（Sci-Fi Texture Pack2）](https://assetstore.unity.com/packages/2d/textures-materials/sci-fi-texture-pack-2-42026)

![tankwars_ss_1_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/d25fc5cb-c470-9a35-3a9e-cc5d87dc0141.jpeg)

UnityのAssetStoreウインドウからインポートする場合は以下のように行ってください。

+ 「上部メニューのWindow」→「Asset Store」
+ 「Kawaii Tanks」や「Sci-Fi Texture Pack」などのワードで検索をかける
+  上記アセットのページへ移動して「インポート」を選択
+  さらに表示されたウインドウで「Import」を選択



###**CrossPlatformInputのインポート**
戦車モデルのアセットではキーボードでの操作とは別に、画面タッチでの操作を有効にするために<Br>[Unity Standard Assets](https://docs.unity3d.com/ja/540/Manual/HOWTO-InstallStandardAssets.html) の **CrossPlatformInput を利用**しています。

今回のゲームにはタッチ操作を実装しないのですが、コンソールに出てきてしまうエラーメッセージを消すために追加でCrossPlatformInputのインポートを行っておきます。

+ 「上部メニューのAssets」→「ImportPackage」→「CrossPlatformInput」
+ 開いたウインドウから「Import」を選択
+ 追加で選択を求められた場合は「I Made a Backup. Go Ahead!」を選択


#Projectウインドウの整理
この時点でProjectウインドウを確認すると、先ほどインポートしたアセットに対応するフォルダがいくつか出来上がっています。

それらと同じ階層に「Scenes」「Scripts」「Prefabs」など、自分の使いたいフォルダを作ってしまうとゴチャゴチャして見栄えが悪いので、ここでは**「_MyFolder」というフォルダを新しく作成して、その中に「Scenes」「Scripts」「Prefabs」など独自のフォルダを配置していくことにします。**

![tankwars_ss_1_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/037e1318-7f4d-ba56-4bc9-b002b9737ad4.jpeg)

+ Projectウインドウで右クリック →「Create」→「Folder」
+ _MyFolderという名前のフォルダを作成
+ **その中にScenesフォルダを作成**して現在のシーンをmain.unityとして保存します



#地面を作る
ここからようやく、シーン内にオブジェクトを配置していきます。
まずはPlaneを使って地面を作ります。

+ Hieraruchyウインドウで右クリック → 「3D Object」→「Plane」
+ 出来上がったオブジェクトの名前を**Ground**に変更

![tankwars_ss_1_4.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/3af4f8de-8979-e0d1-5980-caad4c3f1271.jpeg)

Sceneビューを調整してGroundを見下ろすような形にします。

+ Hierarchyウインドウ内のGroundをダブルクリック
+ Sceneビュー内の右上にある立方体と円錐の集まりから「y」と書いてある緑の円錐をクリック

![tankwars_ss_1_5.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/ec4c9193-62fe-b83e-a28d-12d5e467e2b8.jpeg)

それと同時に**Main Cameraの位置も見下ろし型になるよう調整**します。

<Pre>
Main Cameraを選択してTransformを以下のように設定

Position: (x=0, y=4, z=0)
Rotation: (x=90, y=0, z=0)
</Pre>

![tankwars_ss_1_6.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/4fa872ec-9f0e-3e3f-ec52-ce6c7f294e79.jpeg)

GameビューがGroundを接写している状態になりました。
次にこの真っ白な**Ground**に**Materialを設定**します。

+ Groundに「Sci-Fi Texture Pack2/Materials/Floor_1_Diffuse」をドラッグ&ドロップ

![tankwars_ss_1_7.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/5eee6538-da5a-216a-a4bd-2d69ca8b0239.jpeg)

Materialに設定されていたテクスチャが**Ground**に適用されました。



#戦車を置いてみる
先ほど作った**Ground**の上に戦車モデルを置きます。

+ 「Kawaii_Tanks_Project/Kawaii_Tanks_Assets/Prefabs/SD_Firefly_1.1」プレハブをシーン内に配置し、「SD_Firefly_1.1」のTransformを以下のように設定

<Pre>
Position: (x=0, y=0, z=0)
Rotation: (x=0, y=0, z=0)
   Scale: (x=1, y=1, z=1)

＊ これ以降、PositionとRotationの値が全て0の場合はゼロポジションと表記します。
</Pre>

![tankwars_ss_1_8.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/cba538b3-615b-710b-5c0c-e7a80ed062d2.jpeg)

この戦車モデルを配置するタイミングでGameビューが上の画像のように何もない空間を映したり、見下ろし型のはずが戦車を後方から見るような視点に変化してしまいます。

<font color="Red">環境によってはGameビューの変化が起こらない場合がありますので、その場合は以下「カメラの優先度を設定する」の内容を軽く読み流す程度で問題ありません。</font>



###**カメラの優先度を設定する**
配置した戦車のプレハブには最初から2つのCameraコンポーネントがアタッチされています。

+ TPSゲームのように自分自身を後方から見つめる視点（TPSカメラ）
+ ライフルの照準を覗いたときのように狙った対象を見つめる視点（ガンカメラ）

今回のGameビューが変化してしまった現象は、プロジェクト作成時に設置されている**Main Cameraの映像が戦車に搭載されているCameraの映像で塗り替えられてしまっている状態**です。

この状態を解消するために**Cameraの優先度を変更します。**

+ 「SD_Firefly_1.1/MainBody/Turret_Base/Cannon_Base/Barrel_Base/Gun_Camera」
+ 「SD_Firefly_1.1/MainBody/Camera_Pivot/Main_Camera」
+ それぞれにアタッチされているCameraコンポーネントのDepthを-1に変更
+ プレジェクト作成時に設置されているMain CameraにアタッチされているCameraコンポーネントのDepthを0に変更

![tankwars_ss_1_9.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/84c6337e-b59f-1a6e-ed74-0c99777aa0a9.jpeg)

Gameビューが上の画像の状態に戻ったら、戦車の大きさに合わせて**Ground**と**Main Camera**それぞれの値を調整します。

<Pre>
GroundのScale: (x=7, y=1, z=7)

Main CameraのPosition: (x=0, y=32, z=0)
</Pre>

![tankwars_ss_1_10.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/49ae9f83-a216-72a9-121a-87a78dfd62bd.jpeg)


最後に、配置された戦車は横からみると**Ground**にめり込んでいる状態ですのでこれを修正します。

<Pre>
SD_Firefly_1.1のPosition: (x=0, y=1.2, z=0)
</Pre>



#おまけ（複数カメラについて）
今回はCameraコンポーネントのDepthの値によってカメラの描画する優先度を変更しました。
**1つのシーン内にCameraコンポーネントがアタッチされたオブジェクトが複数ある場合は、Depthの値が小さいものから先に描画され、大きい値のものがそれを塗り替えていきます。**

この**「Depth」**の値と、カメラの映像を画面上のどこに表示するかという値**「ViewportRect」**を併用すると<font color="Red">1つの画面内に2つ以上のカメラ映像を表示する</font>ことができます。

![tankwars_ss_1_11.jpg](https://qiita-image-store.s3.amazonaws.com/0/239877/5b12c100-18be-d347-3841-237426362335.jpeg)

↑ Main Cameraの映像を画面全体に表示し、右上部分にTPSカメラの映像を上塗りしています。

---

[次のページに進む](https://qiita.com/YzRoid/items/3fdb9fc40a9db08be67a)
[イントロダクションに戻る](https://qiita.com/YzRoid/items/544426ceffd4283d6977)
<BR>