【Unity】GameObjectメニューの3D Objectについて解説【初心者向け】

【Unity】GameObjectメニューの3D Objectについて解説【初心者向け】

メニューバーの『GameObject』から作成できるGameObjectの種類について解説するシリーズ第2弾。

今回は「3D Object」のメニューから作成できるオブジェクトについて解説を行います。

元から使える立方体、球体などがここに入っています。実際にゲームを作る際には自分で作ったモデリングデータを使うことが多いかもしれませんが、それまでの仮置きとして使うことも多いかもしれません。

 

環境

macOS 10.14 Mojave

Unity2018.3.14f1

Unity Hub 1.6.2

メニューバーの『GameObject』について

『GameObject』は画面左から5番目、『Assets』と『Component』に挟まれています。

左から5番目にあるのだポッター
左から5番目にあるのだポッター

 

個々のGameObject作成に関してはそれぞれ別記事として作成し、それ以外の項目については以下の記事で解説を行なっています。

 

この記事では以下の項目を解説していきます。

3D Objectのサブメニュー
3D Objectのサブメニュー

 

便宜のため区切り線で領域を分け、それっぽく名前を付けます。

上から、プリミティブなオブジェクト、TextMeshProのオブジェクト、ラグドール、Terrain系オブジェクト、3Dテキスト、と呼びます。この呼び方は私が勝手に呼んでいるだけのものなので注意。

プリミティブなオブジェクト

プリミティブなオブジェクトとは立方体や球体など、デフォルトで使えるモデルのことを指しています。

詳細な仕様についてはUnityのマニュアルをご覧あれ。

Cube

立方体のメッシュを持ったGameObjectを作成します。

Cube
Cube

 

作成時にはBox Colliderがアタッチされています。

床、壁、天井など使用用途は多く、テスクチャを貼ればそれなりに見えます。頂点数が多いオブジェクトはパフォーマンスにとって負荷が大きくなるため、このような単純なメッシュのオブジェクトを使って障害物や壁などにするのもありです。

例えばノーマルマップ付きテクスチャを貼るだけでも、デフォルトの真っ白箱よりはそれっぽくなります。TransformのScaleを0.1などにすれば薄い板の出来上がり。

テクスチャを貼った
テクスチャを貼った

 

Transformの位置、回転、スケールを変更するだけでも用途が広がるので、色々と試してみてね。

Sphere

球体のメッシュを持ったGameObjectを作成します。

Sphere
Sphere

 

作成時にはSphere Colliderがアタッチされています。

球体も何かと使えます。ボールとして使うこともできますし、半分だけ壁から出して球体の電源としても使えます。

例えば下の画像はCubeで囲った部屋をSphereが半分だけ出て照らしています。マテリアルのエミッションで光らせているのでほんわりと光っていますね。

マテリアルで光らせる
マテリアルで光らせる

 

裏側は明るいので白く光っています。カメラが裏側に回ってこないならこれでも。

うらがわ
うらがわ

 

単純な球体なので、色々と使ってみると「あ、これもいいんじゃない?」なんて思わぬ発見があったりします。

Capsule

カプセル型のメッシュを持ったGameObjectを作成します。

Capsule
Capsule

 

作成時にはCapsule Colliderがアタッチされています。

これ単体で使うことはあんまりないかも。人型オブジェクトの仮置きとして使うくらいでしょうかね。

ドクターマリオの3D版を作りたい場合は薬のカプセルにぴったりです。

Cylinder

円柱形のメッシュを持ったGameObjectを作成します。

Cylinder
Cylinder

 

作成時にはCapsule Colliderがアタッチされています。InspectorウィンドウでMesh RendererをDisableにすると分かりやすいです。

Capsuleコライダーがちらり
Capsuleコライダーがちらり

 

円柱は柱に使うと便利です。あとは横にして車のタイヤの仮置きにも。

柱がいっぱい
柱がいっぱい

Plane

平面のメッシュを持ったGameObjectを作成します。

Plane
Plane

 

作成時にはMesh Colliderがアタッチされています。これはメッシュの形に合わせたコライダーです。

PlaneはXZ平面に広がるオブジェクトで、それぞれUnity世界で10単位の長さを持ちます。床として使用するのに最適なオブジェクトとなっています。

厚さの概念はなく、ScaleのYが0より大きければ上記の画像の厚さを保ちます。

ただし、ScaleのYを[1e+17]のようにとてつもなく大きい数字にすると、なぜか回転した状態で表示されます。この辺は演算バグでしょうか? まぁPlaneにこんな大きな値を入れる人などごく僅かでしょうから影響はないんですけどね。

1e+17での傾き
1e+17での傾き

 

Rotationは0のまま
Rotationは0のまま

 

Planeは裏から見ると描画されません。表面しか描画されないので、向きには注意しましょ。

裏からだと描画されない
裏からだと描画されない

Quad

平面のメッシュを持ったGameObjectを作成します。

Quad
Quad

 

作成時にはMesh Colliderがアタッチされています。ここまでPlaneと共通していますね。

Planeとの違いは、大きさと向いている方向です。QuadはXY平面を向いており、大きさはUnity世界で1単位となっています。

Plane同様に裏側からだと描画されません。

やっぱり見えない
やっぱり見えない

 

今Sceneビューがどの方向を向いているのかを確かめるには、ビューの右上にあるシーンギズモを参照します。

シーンギズモ
シーンギズモ

 

色の付いている方向が各軸の正の方向です。上の画像の状態ならデフォルトのQuadが画面に描画されます。

Quadはライブ会場のスクリーンみたいなイメージで使えます。他にもUIのように情報を表示するためのパネルとして使うのもいいと思います。

下の画像はRender Textureを使って右奥のカメラの画像をテクスチャとして出力し、それをQuadに描画しています。ドットパターンのマテリアルを上から描画しているため、スクリーンっぽく使えてる……はず。Quadが厚みを持っているように見えますが、Quadの後ろにCubeを配置している点にご注意くださいな。

ドットパターンを入れるとよりライブ会場っぽい
ドットパターンを入れるとよりライブ会場っぽい

 

TextMeshProのオブジェクト

TextMeshProで文字、あるいはスプライトを表示するためのオブジェクトを作成します。

TextMeshPro – Text

3D空間に文字を表示するTextMeshProのオブジェクトを作成します。

TextMeshPro
TextMeshPro

 

文字を表示するだけではなく、タグを使うことで文中にスプライトを表示することもできますし、太字、斜体、打ち消し線などを表示することもできます。

Spriteで絵文字を表示
Spriteで絵文字を表示

 

テキストエリアで使用できるタグについてはコガネブログさんのところで日本語でまとまっています。

 

文字にはグラデーションをかけることも可能。下の画像では4色のグラデーションを適用しています。大昔に作られたホームページってこんな色合いのロゴとかありましたよね。

ホームページビルダーとかにありそうな色合い
ホームページビルダーとかにありそうな色合い

ラグドール

ラグドールは猫の品種……ではなくて「ぬいぐるみ」を意味する言葉。

キャラクターのモデルを使って、ぐったりとしたぬいぐるみを作りたい時に使います。やられ演出でも使えるかも。

Unityのマニュアルにも記載があるので、こちらもぜひ。

のたぐすさんのブログではSDユニティちゃんを使って解説してくれています。参考にさせてもらいました。

Ragdoll…

ラグドールウィザードを起動します。

ラグドールウィザード
ラグドールウィザード

 

体の部位を表すパーツ名が並んでいるので、対応するパーツを当てはめていきます。本当はMayaとかBlenderで作ったモデルをインポートして使うのがいいんだけど、せっかくGameObjectの回だし、プリミティブなオブジェクトを組み合わせて作ってみましょ。

Pelvis……骨盤

 

Left Hips……左の尻から太ももあたり

Left Knee……左の膝からすねあたり

Left Foot……左の足

 

Right Hips……右の尻から太ももあたり

Right Knee……右の膝からすねあたり

Right Foot……右の足

 

Left Arm……左の肩から肘にかけて

Left Elbow……左の肘から先

 

Right Arm……右の肩から肘にかけて

Right Elbow……右の肘から先

 

Middle Spine……背骨の中心

Head……頭とか首

 

これらに相当するパーツを作って当てはめていきました。セットしていない項目があると警告が出るので注意。

ウィザードに沿って当てはめた
ウィザードに沿って当てはめた

 

そして出来上がったのがこちらです。

その配色はまずいですよ!
その配色はまずいですよ!

 

この状態でゲームを実行すると以下のように倒れていきます。Ragdollウィザードが自動的にRigidbodyやCharactorJointをアタッチしてくれるので、それらを調整していくといい感じになります。今回はUnityの中で作れるパーツで突貫工事をしましたが、モデリングソフトで作ったキャラクターならボーンとかもしっかり入っているので、もう少し自然になります。

ティウン……じゃなくてばたんきゅー
ティウン……じゃなくてばたんきゅー

 

上でも書きましたが、力尽きて倒れる時の演出などに良さそうです。あとはかわいいキャラクターのモデルがあればそのまま人形として登場させるとか、UFOキャッチャーゲームの景品にもいいかも。

Terrain系オブジェクト

Terrainは地形オブジェクトで、Inspectorウィンドウからツールを選択して高低差をつけたり、地面にテクスチャを貼ったりとフィールド作りに最適です。

Terrainの読み方はテレインだったりテラインだったりと人によって異なります。マニュアルだとテレインなのでこっちがいいのかな? ブログで書くときは英語で書いちゃえばいいので楽ちんです。

Terrain

Terrainオブジェクトを作成します。

Terrain
Terrain

 

比較用に、画像の左下にCube(大きさ1)をオレンジの線で表示させています。とんでもなく広いですね。

Inspectorウィンドウに表示されるブラシを使って、このオブジェクトに高低差をつけ、テクスチャを貼っていきます。

Terrainのブラシ
Terrainのブラシ

 

実際に高低差を付けていく際には、Inspectorウィンドウの上部に表示されているStaticのチェックボックスを外してから編集を行うのをおすすめ。というのも、ブラシで一部をなぞるだけでもライトマップの再生成が走るため、Sceneビューでの見え方が頻繁に変わってしまい、高低差が分かりにくくなるんです。

Staticを一度外してから編集
Staticを一度外してから編集

 

Sceneビューでは、Terrainオブジェクトの上でブラシをドラッグすることで地面が盛り上がっていきます。フチの部分をしっかりと山のように囲っておくことで、それっぽいフィールドが出来上がります。

なんとなくそれっぽく作れる
なんとなくそれっぽく作れる

 

テクスチャを貼ってStaticをTrueに戻せば、フィールドっぽく見える……はず!

マグマと岩山(魔界仕立て)
マグマと岩山(魔界仕立て)

 

このTerrainはパフォーマンス面でちょっと重いというデメリットはあるものの、Unity内で地形を作れる点は大きなメリット。ぜひ手を動かして遊んでみてくださいな。

Tree

Treeオブジェクトを作成します。

Tree
Tree

 

最初は1本の枝だけが表示されている状態です。InspectorウィンドウのTreeツールでどんどん枝や葉っぱを足していきます。

以下の画像は枝を追加したものです。メインの木から枝が生まれ、その枝からさらに枝分かれして……と増やすことができます。それぞれの枝にはTree用のマテリアルを設定する項目もあります。

枝はツリー構造で表示される
枝はツリー構造で表示される

 

上の状態だとSceneビューでは以下のように表示されます。枝の出現頻度を設定することができるので、それを調節して枝分かれを作っていきます。

枝分かれを作る
枝分かれを作る

 

ここに葉っぱを追加していきます。葉っぱを追加したい枝を選択し、葉っぱ追加アイコンからどんどん葉っぱを追加していきます。こちらも出現頻度を設定することができます。

枝から葉っぱに線が伸びている
枝から葉っぱに線が伸びている

 

Sceneビューで見るとこうなっています。葉っぱもTree用のマテリアルを使って画像を表示しています。3分で作った葉っぱ画像ですが、それっぽく見えますね(自画自賛)

葉っぱを描画するとそれっぽい
葉っぱを描画するとそれっぽい

 

Tree用のマテリアルと書きましたが、これは専用のシェーダーが入っているので、それを選択してマテリアルを作ります。

Natureのシェーダーを使う
Natureのシェーダーを使う

 

Treeエディターについてはマニュアルにも記載があるので、こちらもご覧くださいな。

Wind Zone

風の効果を表現できるWindZoneオブジェクトを作成します。

WindZone
WindZone

 

上で紹介したTreeはPrefab化して、Terrainの上にまとめてインスタンス化することができます。それらの木に風が当たって揺れる様子を表現できるのがこのWindZoneです。

風の強さ、乱気流のような荒ぶり方、突風の頻度など、設定を変えることで木の揺れ方が変わります。

風の効果を確認するため、以下のようにTerrainに配置した木を使って揺れる様子を見てみましょうか。

ツリーブラシで木を配置
ツリーブラシで木を配置

 

ゲーム画面ではこのように表示されています。溶岩の上に配置した遠くの木については、詳細まで描画されません。これはパフォーマンスを考慮して、遠くのオブジェクトについては簡易的な描画に留めているためです。

ゲーム画面ではこう見える
ゲーム画面ではこう見える

 

WindZoneのモードは「Directional」と「Spherical」の2つです。

「Directional」は風の方向を示すもので、WindZoneのオブジェクトがどこにいてもその向きに風が吹いています。

「Spherical」は効果範囲が球状となっていて、WindZoneのオブジェクトからの距離(半径)を指定することで効果範囲を設定できます。

ここでは「Directional」を使って風を吹かせてみます。容量の関係で画像が小さくて申し訳ないのですが、手前の木を見ていただくと風に揺れている様子が分かるかと思います。

風が……くる……!
風が……くる……!

 

GIF画像ではWindZoneオブジェクトのアクティブ/非アクティブを切り替えています。WindZoneがアクティブだといい感じに風が吹いているようです。

また、画面奥の木については、風で揺れる様子は描画されません。カメラが近づいていくことで上の画像のように揺れる様子が描画され始めます。これもパフォーマンス面を考慮した動きですね。

風の動きはCubeなどにも影響を……与えないんです。残念。あくまでTerrainのTreeオブジェクトに対してのみ風の表現を付け加えてくれるのです。

 

3Dテキスト

3D空間にテキストを表示する機能です。TextMeshProと同じ役割ですが、メッシュのクォリティを考えると……。

3D Text

3D空間に文字を表示するTextMeshのオブジェクトを作成します。

TextMesh
TextMesh

 

ここで、上の方で解説したTextMeshProと比べてみましょうか。

上がTextMeshPro、下が3DText
上がTextMeshPro、下が3DText

 

うーん綺麗。TextMeshProの方が綺麗かつ多機能なので、こちらの3D Textを使うことは少ないかも。

こちらの3D Textを優先して使うケースがあるとすると、日本語を手っ取り早く表示する場合でしょうかね。というのも、TextMeshProの方はフォントアセットを作る必要があるため、ちょっと手間がかかるんです。

開発者自身がめんどくさいからとぼやけた文字を使うか、それともユーザーのことを考えて綺麗に表示できる機能を使うかはあなたにお任せします。

……TextMeshPro、使おう。

まとめ

このページではメニューバーの『GameObject』から作れる『3D Object』の項目について解説を行いました。

簡単に使えるものから、ちょっと手のかかるものまであります。一度に全部を使わなくても、何作かゲームを作っていくうちに1つずつ使いこなせるものを増やしていくと成長を実感できると思います。

という訳で、早速Unityを開いてGameObjectを作り、Sceneビューで見てみよう!

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!