今回から5記事完結で簡単なブロック崩しゲームを作っていきます。
Unity初心者でも実践できるように画面操作などやゲームオブジェクトの親子関係操作なども画像付きで説明していきますね。
今回は
- Sceneビューとインスペクタービューの基本的な使い方
- Gameオブジェクトの位置・向き・形状の変更
- Gameオブジェクトの親子関係の構築
- ゲーム画面にオブジェクトを表示させるためのRendererコンポーネントを知る
- マテリアルの作り方 マテリアルを設定して色や見た目を変える
以上の内容をブロック崩しのフィールド作成を実践しながら身に着けていきましょう。
この記事はC#入門講座の知識をある程度理解していることを前提に書いていますので、そちらも参照してくださると幸いです。
新規プロジェクトの作成
まず、Unity Hubを使ってプロジェクトを作成しています。
Unity Hubを使用しなくてもプロジェクト作成自体は可能なので、使ってない人は適宜読み替えてください。
テンプレートは3Dで作成しましょう。
プロジェクト名は好きなものでいいですが、この記事では「Breakout」と名付けています。
Scene(シーン)にゲームで必要なものを配置する
プロジェクト作成直後、ScenesフォルダとSampleSceneファイルが作成されているのでそのファイル名を「BreakoutScene」に変更します。
プレイヤーの配置 Cubeオブジェクトを使ってみよう
まずはプレイヤーとなる横棒を配置しましょう!
メニューのGameObject > 3D Object > Cube をクリックして箱のGameObjectを作成しましょう。
作成したGameObjectには「Player」と名付けましょう。
GameObjectの形状を変える Transformとインスペクターの使い方
「Player」は作成された直後では立方体なので好きな形状に変更しましょう。
UnityでGameObjectの形状を変える際にはTransformコンポーネントのパラメータを変更します。
Transformコンポーネントでは次のパラメータを変更することができます。
- 位置:Position。シーン上の位置を設定できる。
- 回転:Rotation:GameObjectの向きを設定できる。
- スケール:GameObjectのサイズを指定できる。
今回はブロック崩しなので、横長になるようにスケールを変更していますが、好きな形に編集してもOKです。
ただし、スケールの値を0にすると画面から見えなくなるので注意してください。
GameObjectを編集する時はSceneビューで行うと便利
GameObjectを編集する時はSceneビューを使用すると便利なので、そちらに切り替えてみましょう。
Sceneビューを表示するにはメニューのWindow > General > Sceneをクリックしてください。
Unityエディターのタブの位置を移動させることでGameビューも一緒に表示することができますので試してみるのもいいでしょう。
Sceneビューでできる操作について Unityエディタの使い方
Sceneビューではシーン上に存在するGameObjectを確認することができます。
Sceneビュー上に写っているGameObjectをクリックするとそのGameObjectを選択することができます。
また、ドラックすることで範囲選択することもできます。
Sceneビューではドラック操作の時に次のキーを押すとカメラの視点を切り替えることができます。
Mac OSの場合
- Altキー+左ボタンでのドラック:画面中心を元に回転する
- Altキー+右ボタンでのドラック:カメラのズーム。(ホイールでもOK)
- Altキー+Cmdキー+左ボタンでのドラック:画面中央を移動させる。
Windowsでもボタンは少し異なるかもしれませんが、同じようなボタンで操作できます。
また、Sceneビューの右上にあるUIを操作するとXYZ座標軸にピッタリあった位置にカメラを移動することができます。
またGameObjectを選択した状態でメニューのGameObject > Move To Viewをクリックすると選択したGameObjectが画面中央になるようカメラが自動的に移動します。
また、ショートカットキーとしてFキーを押すことでも似たようなことができます。
SceneビューでのGameObjectの編集について
Unityエディターの画面左上のボタンを押すことで選択中のGameObjectのTransformの位置、回転、スケール操作を切り替えることができます。
また、次のショートカットキーを押すことでも切り替えることができます。
- Q:カメラの位置を変える。この状態だとクリックでGameObjectを選択できないので注意。
- W:GameObjectの位置編集モードに切り替える
- E:GameObjectの回転編集モードに切り替える
- R:GameObjectのスケール編集モードに切り替える
- T:直方体ツール。簡単に形状を変更することができる
- Y:位置、回転、スケールを同時に編集するモード
SceneビューでGameObjectを編集したい時は画面い表時される矢印や円などをドラックすると直感的に編集することができます。
大まかな編集はSceneビューで行い、きっちりとした値にしたい時はInspectorから直接値を設定するようにするといいでしょう。
ボールの配置 Sphereオブジェクトを使ってみよう
ここまでUnityの基本的な操作について解説していきました。
本筋に戻りまして、次はボールを配置しましょう!
こちらは球体になるので、メニューのGameObject > 3D Object > Sphereをクリックしてください。
名前は「Ball」に設定してください。
インスペクターでTransform.Position.yの値を増やしてPlayerオブジェクトと重ならないようにしておきます。
ブロック崩しゲームの外壁の配置
次はブロック崩しの外壁を配置していきましょう。
GameObjectをまとめるためのGameObjectを用意する
外壁は複数のGameObjectを使って配置していきます。
プレイヤーやボールと同じくそのままシーンに配置するとGameObjectをたくさん作ることになり、管理が難しくなります。
そのため、外壁を表すGameObjectをまとめるための親GameObjectを作り、外壁はそれの子GameObjectにしましょう。
それではまず外壁をまとめる親GameObjectを作成していきます。
メニューのGameObject > Empty GameObjectをクリックしてください。作成したGameObjectには「WallRoot」と名付けてください。
画面に表示するためにはRendererコンポーネントが必要
作成された「WallRoot」は画面に表示されません。
これはUnityにおいて画面に表示したいGameObjectにはUnityEngine.Renderer
コンポーネントを継承したものをアタッチする必要があるためです。
空のGameObjectとして作成したものにはTransformコンポーネントしかアタッチされていませんので、画面に表示されない状態になっています。
UnityEngine.Renderer
を継承したコンポーネントは次のものがあります。
- MeshRenderer:3Dだと基本的にこちらが使われている。
- SpriteRenderer:2Dを描画する時に使用される。
- などなど
外壁を作っていく GameObjectの親子関係の設定の仕方
次に、外壁を作成します。
外壁はプレイヤーと同じく箱でいいので、GameObject > 3D Object > Cubeをクリックし箱のGameObjectを作成してください。名前は「Wall」に変更してください。
外壁となるGameObjectはこの記事では全て「WallRoot」の子GameObjectにしますので、次の方法で親子関係を設定してください。
ドラック&ドロップで設定する方法
メニューから作成するとシーンの直下にGameObjectが作成されますので、作成した「Wall」を「WallRoot」へドラッグ&ドロップしてください。そうすると「Wall」は 「WallRoot」の子GameObjectになります。
作成時に設定する方法
また、作成時に直接親GameObjectを指定することができます。
その場合はHierachyタブ上で親にしたいGameObjectの上で右クリックしてコンテキストメニューを開いてください。
開いたコンテキストメニューにはメニューのGameObjectの内容と似たものが表示されていますので同じ様にGameObjectを作成することができます。
作成したGameObjectは既にコンテキストメニューを開いた時にクリックしたGameObjectの子GameObjectになっています。
これらの操作を使用して外壁をプレイヤーやボールを囲むように配置してみましょう!
次の画像の外壁には以下のようなGameObjectを追加しています。
- 上のWall: Pos(0, 9, 0), Scale(12, 1, 1)
- 左のWall: Pos(-6, 0, 0), Scale(1, 19, 1)
- 右のWall: Pos(6, 0, 0), Scale(1, 19, 1)
- 下のWall: Pos(0, -9, 0), Scale(12, 1, 1)
- 画面奥のWall: Pos(0, 0, 1.1), Scale(11.5, 17.5, 1)
崩れる壁ブロックを配置しよう
最後に崩れる壁を配置してみましょう。
崩れる壁も箱で表現するのでメニューからGameObject > 3D Object > Cubeで作成してください。
また、外壁と同じく沢山作る必要があるのでまとめるための「BlockRoot」と名付けたGameObjectを作成し、崩れる壁はそれの子GameObjectにしてください。
崩れる壁の形状や位置は好きなものでいいですが、他のGameObjectとは重ならない様に配置してください。
この記事では崩れる壁はたくさんありますがそのTransformは次のものをベースにしています。
- Block: Scale(1.9, 1.5, 1)
GameObjectの複製の仕方
崩れる壁は沢山配置する必要がありますが、毎回GameObjectを作成して形状を変更するのは手間がかかります。
そんな時はGameObjectを複製(コピー)しましょう!
Unityでは一度作成したGameObjectを簡単に複製することができます。
方法は複製したいGameObjectの上で右クリックをし、開いたコンテキストメニューからDuplicateをクリックしてください。
また、ショートカットを利用でも選択したGameObjectを複製することができます。
複数のGameObjectを一度に移動させる方法
Unityでは複数のGameObjectを一度に移動させることができます。
方法は簡単で、移動させたいGameObjectを全て選択し移動ツールを使用してください。
また複数のGameObjectを選択した状態ではInspectorの項目が少し変わります。
Inspectorには選択したGameObjectで同じコンポーネントがアタッチされているものだけが表示されます。
コンポーネントのパラメータも見た目が変わり、同じ値のものはその値が表示されますが、異なる値が設定されている場合は’—— ‘と値が表示されません。
その状態でも値を設定することはできます。実際に複数オブジェクトを選択しながらインスペクターの値を変更してみてください。選択したGameObject全てに指定した値が設定されます。
多くのGameObjectのパラメータを一括で設定したい時に利用してみましょう。
マテリアルを設定してみよう
今回の記事ではシンプルなブロック崩しを作成しますが、同じ見た目のGameObjectが沢山あると見分けがつきづらいです。
なので、マテリアルを作成して好きな色で色分けしてみましょう!
マテリアルの作成
マテリアルはメニューのAsset > Materialから作成することができます。
作成したマテリアルを選択するとInspectorの方からマテリアルの設定ができます。
マテリアルでは大雑把に使用するシェーダーとそのシェーダーのパラメータを設定できます(シェーダーの詳細はここでは触れません。シェーダーの実態は、レンダリングと呼ばれる”計算によって画像を生成する機能”です)。
Unityには既に色々なシェーダが用意されていますが、今回はUnityの標準的なシェーダであるStandard Shaderを使用します。
Standard Shaderには3Dレンダリングのライティング(光の設定)に関係のあるパラメータが存在します。
が、ここでは簡単に見た目を変えたいだけなのでColorを好きな色に変更してください(以下の画像ではマテリアル名をPlayerにしています)。
マテリアルをGameObjectに設定
作成したマテリアルはUnityEngine.Renderer
系のコンポーネントに設定できます。
UnityEngine.Renderer
系は画面に表示する形状を表すものになりますが、マテリアルはその見た目を制御する機能です。
基本的にUnityEngine.Renderer
系には一つのマテリアルが必要になります(複雑な3Dモデルになると複数のマテリアルが必要になってきます)。
マテリアルの設定にはUnityEngine.Renderer
系のMaterialの箇所を使用してください。
設定されているマテリアルはInspectorの下側に表示されます。
また、GameObjectの見た目のプレビューもInspectorからできます。
また、マテリアルを直接GameObjectにドラック&ドロップすることでも設定することができます。
実際に配置したGameObjectにマテリアルを作って設定していこう
ここまででマテリアルの作り方と設定方法を説明したので、次はシーンに配置したBlockのGameObjectにマテリアルを設定していきましょう!
記事では次の画像のように色分けしました(新しいマテリアルを複数個作成してアタッチしています)。
画像では今回配置したGameObjectの位置も修正していますので、読者の方もいい感じになるように調節してみましょう!
この記事では次のマテリアルを作成しました。
- Player:紺色
- Ball:黄色
- Wall」青緑色
- BlockBlue:青色
- BlockGreen:緑色
- BlockRed:赤色
ブロックの位置を変更するだけでは画面が入りきらない場合はMainCameraのパラメータも変更してみるといいですよ。
まとめ
少々長くなりましたが、今回はここまでになります。
今回の記事ではブロック崩しに必要となるGameObjectをシーンに配置していきました。
今回は初めてのUnityゲーム開発を念頭に置いたので、Unityの基本操作やGameObjectの性質、マテリアルなどの説明もしてきました。
今後はこれらの操作をどんどん使っていきますので、ぜひ覚えてください。
記事をまとめると次の様になります。
- GameObjectの位置・向き・形状を変えるにはTransformを使用するといい。
- GameObjectは親子階層を構築できる。
- 子GameObjectは親のTransformの影響を受ける。
- 画面に表示させるためにはRenderer系のコンポーネントをアタッチする必要がある。
- Renderer系コンポーネントにはマテリアルというアセットが使用されて、見た目の調節ができる。
それでは次の記事に行ってみましょう!
コメント