この講座はシミュレーションRPGの作り方の第二回です。
前回はプロジェクトの作成と画像素材のインポートを行いました。
前回の記事:
第2回では戦略シミュレーションRPGのキャラクターと敵の戦いの舞台であるマップを3Dオブジェクトで作成します。
3Dオブジェクトの作成とプレハブ化、マテリアルの使い方も覚えていきましょう。
ブロック(マス)オブジェクトを作成する
このゲームのマップは四角形のマスに区切られています。
まずはマス1つ1つにあたるブロックのオブジェクトを作っていきましょう。
Hierarchyビューを右クリックし、[3D Object]→[Cube]の順でクリックするとシーン内に立方体のオブジェクトを新規作成できます。
オブジェクト名は草の生えた地面という事で「Block_Grass」などにしておきます。
ブロックを作成できたら、続いてInspectorビューのTransformコンポーネントを確認します。(画像では右上の部分です)
- Inspectorビューでは選択したオブジェクトに取り付けられている機能(コンポーネント)をそれぞれ確認・変更したり追加などが行えます。
Transformコンポーネントは全てのオブジェクトが持っているもので、そのオブジェクトの位置(Position)や回転(Rotation)・拡大率(Scale)を指定できます。
ブロックを動かすのはマップ作成時に行うので、最初はPosition値に全て0が入っている事を確認し、違っていれば0で上書きしてください。
他、Cube作成時にデフォルトで取り付けられているコンポーネントは以下になります。いずれも変更する必要はありません。
- Mesh Filter … ↓のMeshRendererと合わせて立方体の描画に必要なコンポーネント
- Mesh Renderer
- Box Collider … 当たり判定を設定。このゲームでは物理演算を行いませんが、タップの判定を取るのに使用します。
マテリアルを設定する
現在この作ったばかりのブロックは真っ白な見た目をしています。
地面だと分かるようにテクスチャ(画像)を張り付けていきましょう。
3Dオブジェクトにテクスチャを張り付けるにはまずマテリアル(Material)の作成と取り付けが必要になります。
Assets/Materialsフォルダ以下に[Create]→[Material]で新規作成を行いましょう。名前はオブジェクト名と同じでも大丈夫なので、ここでは「Block_Grass」とします。
続いてInspectorビューでマテリアルにテクスチャを割り当てます。
初期設定のStandardシェーダーの場合、[MainMaps]内[Albedo]パラメータにテクスチャをセットできる箇所があります。
四角形の空きスペースに画像をドラッグアンドドロップで持っていくか、隣にある〇のような文字をクリックする事で指定ができます。
今回はTextures/Fields内にある画像素材Tile_Grassを指定しましょう。
(任意)マテリアルのシェーダーを変更する
初期設定のStandardシェーダーはライティングの影響を受けます。つまり、カメラや光源の位置関係などによって見え方が変化します。
かわりにUnlit/Textureシェーダーを使用する事でライティングの影響なく、一定の明るさでテクスチャを表示し続けてくれるようになります。
今回の講座ではこのシェーダーを使用しますが、好みによって他のシェーダーを使用していただいてもOKです。
※テクスチャの指定は保持されているので改めて指定する必要はありません。
オブジェクトにマテリアルを適用する
最後にこのマテリアルをオブジェクトに適用します。
シーン内のGrassブロックオブジェクトを選択した状態で、Inspectorビューの下部にマテリアルをドラッグアンドドロップする事で設定できます。
これでオブジェクトにテクスチャを表示させる事が出来ました。
オブジェクトをプレハブ化する
次に、このGrassブロックをプレハブ化してシーン内に沢山配置する準備をします。
プレハブ化する事によってこのオブジェクトを1つのテンプレートとして扱い、同じ設定のもとシーン内にいくつも配置したりゲーム中に新規生成する事も可能になります。
プレハブ化の操作は簡単ですが、今回はその前にブロック処理用のスクリプトを取り付けておきます。
各ブロック用の処理クラスの作成・アタッチ
現在このGrassブロックはこれといった専用の処理を持たない普通のオブジェクトですので、後から処理を追加できるように空のスクリプト(クラス)をあらかじめ取り付けておきます。
Assets/Scripts以下に[Create]→[C# Script]で新規C#スクリプトを作成します。クラス名はMapBlockとしてください。
- 注意:作成したC#スクリプトのファイル名は確定後に変更しないようにしてください。
以降スクリプトを新規作成する際もこのScriptsフォルダ内で行っていきます。フォルダの追加は自由ですので、適宜分かりやすいように分類分けをしていくのも良いでしょう。
次に、作成したMapBlockスクリプトを先ほどのGrassオブジェクトに取り付けていきます。この操作はアタッチと呼ばれています。
Grassオブジェクトを選択し、Inspectorビュー内にスクリプトをドラッグアンドドロップすれば追加完了です。
このスクリプトの処理部分は次回以降に作成します。
オブジェクトのプレハブ化
オブジェクトの設定が一通り完了したのでプレハブ化をしましょう。
プレハブの保存先はAssets/Prefabsフォルダに行うのでProjectビューでそれを開いておき、
HierarchyビューからGrassブロックオブジェクトをProjectビュー内にドラッグアンドドロップします。
ファイルが追加され、Hierarch内でオブジェクト名が青色で表示されるようになっていれば完了です。
プレハブ化によって、シーン内に元から配置されていたGrassオブジェクトはこのプレハブのインスタンス(実体)となります。
プレハブ側に何らかの変更を加えると(例:コンポーネントを追加する)、シーン内のインスタンス側にも同じ変化が適用されるようになります。
水場ブロックオブジェクトを作成する
ここまででキャラクターが歩ける地面ブロックのプレハブを作成する事ができましたが、ゲーム的には通行できないブロックもあった方が戦略性が高まります。
ここではWater(水場)ブロックとしてもう1つのプレハブまで作成しておきましょう。設定としてはGrassブロックとほぼ同じなのでこれを使いまわす形で行います。
まずシーン内に存在するGrassブロックインスタンスをHierarchyビューから右クリックし、[Prefab]→[UnPack]と選択する事でプレハブとの紐づけを解除します。
そしてオブジェクトを変更しましょう。例では「Block_Water」としています。
大きさを変更する
水場ブロックは草ブロックより見た目の位置が低くなるように、縦方向のScale(拡大率)を変更しておきます。
TransformコンポーネントからScaleの[y:1]となっている部分を変更します。ここでは0.7くらいの値をセットします。
マテリアルを変更する
水場用のテクスチャを割り当てる為に、草ブロック用のマテリアルと同じ設定でテクスチャだけ違うものを用意します。
ここではテクスチャ名は「Block_Water」としています。設定できたら同じようにオブジェクトに適用します。
最後にこのWaterブロックオブジェクトもプレハブ化を行います。
これで足場用ブロックと壁用ブロックの2種類が揃いました。
まとめ
今回はマップを作成するための準備として、マップを構成する為のブロックプレハブの2種類を用意しました。
- オブジェクトはコンポーネントという形で機能を持ち、それらはInspectorビューから設定できます。
- マテリアルを使用する事で3Dオブジェクトにテクスチャ(画像)を貼り付ける事が出来ます。
- オブジェクトをプレハブ化する事で同じ設定のオブジェクトを大量に用意したり、ゲーム中に生成する事も出来るようになります。
次回からC#でスクリプトを作るようになっていきます。まずはマップを自動生成する所から始めていきます。
次の記事:
コメント