チュートリアル実践memo
1.どのチュートリアルをやるのか?
Unity LeanというUnityの公式学習サイトで沢山のチュートリアルが用意されています。
今回私が試したのはこちら。初めて触る自分にとって基礎を学ぶには最適でした。
Unity入門チュートリアル 「玉転がし」(Roll-a-Ball) Bolt版
追伸
当時はありませんでしたが、現在はBolt版とVisual Scripting版がそれぞれ公開されているようです。
Unity入門チュートリアル 「玉転がし」(Roll-a-Ball) ビジュアルスクリプティング版
2.いざ実践
基本的にはガイドの通り進めていきます。以下、備忘録。
プロジェクト作成
始めてみると、いきなりガイダンスに掲載されている画面となんか違う。
チュートリアルのバージョンがUnity2019.4、私の環境はUnity Hub3.1.2となっており、バージョン差異によるもの。ここはなんとなく「新しいプロジェクト」ボタンからプロジェクトが作成できた。
エディタのレイアウトを統一する
プロジェクト作成が完了すると、エディタが開きます。
レイアウトはいくつか選べるみたいですね。好みでしょうか。
GameタブのAspectは4:3は選べず。16:9で進めます。
インターフェースの使い方
エディタの画面構成を学習することができました。私の中の理解を端的にまとめました。
-
シーン(Scene)ビュー
作成したオブジェクトを視覚的に確認・操作ができる画面。 -
ゲーム(Game)ビュー
利用者からみた画面。UI。 -
ヒエラルキー(Hierarchy)ビュー
新規オブジェクトの作成と、作成したオブジェクトの一覧表示。 -
インスペクター(Inspector)ビュー
作成したオブジェクトやアセットのパラメータの参照・変更。 -
プロジェクト(Project)ビュー
プロジェクト内のファイル情報。構成はOS上の階層構造を踏襲。
Sceneビューの移動方法
最初は戸惑いましたが慣れですかね。
普段PCゲームをする人なら操作感は違和感ないのでしょうか。
- マウスホイール:Sceneビューの拡大・縮小
- 右クリックを押しながらドラッグ:視点を回転
- 真ん中クリックを押しながらドラッグ:Sceneビューの平行移動
- オブジェクトをダブルクリック:指定のオブジェクトにフォーカス
Boltのインストール
Bolotはビジュアルスクリプティング機能(コーディングせずにGUIでスクリプトが作成できる)を用いる為のアセットですが、Visual Scriptingの機能はUnity2021.1以降は標準でパッケージとしてインストールされています。理解する前にBoltインストールしちゃいましたが、後になって不要だったと知りました。
オブジェクトの作成・変更
- 3DオブジェクトはHierarchyビューから作成実施
- 地面:Plane
- 壁:Cube
- ボール:Sphere (今回のPlayer)
- 色の変更はProjectビューからMaterialファイルを作成
- InspectorのAlbedoから色を変更
- MaterialをHierarchyのオブジェクトにドラッグ&ドロップで色が反映される
ボールを落とす・転がす・演算機能の追加
PleyaerのInspectorビューからAdd Component→Rgidbodyを追加するだけでボールが自由落下する。初めて動きが出た。感動。
入力機能の設定はBoltを使った手順になっているが、Visual Scriptingでも同様の操作になるので、難なく設定ができました。
- Update Event ユニットは、後続処理を毎フレーム更新時に呼び出す。
- FixedUpdate Event ユニット は、物理演算でキャラクターが動く度に、後続処理を呼び出す。
- Input.GetAxis ユニットは、キーボード入力を受け取ることができる。
- Rigidbody.AddForceユニットは、取得したキー入力を元に力を加える。今回はInput.GetAxis ユニットの入力をrigidbodyに力を加えている。
- Multiply ユニットは力を増幅させることができる。今回は10倍に増幅。
- インスペクタビューの Variables で定義した変数(今回はSpeed)はVisiual Scripting上にドラッグ&ドロップするとGet Variable ユニットが生成される。Multiply ユニットの入力とすることで、増幅する値を変数にすることができる。
カメラを動かす
- Playerの子にMain Cameraを配置するだけで、オブジェクトを追随してくれる(親オブジェクトとの相対座標を保持)
- ボールが回転するため、ただ追随するとカメラも回転してしまう。Visiual Scripting(グラフ)でカメラを制御する。やっていることはこんな感じ。
1. PlayerとCameraの初期位置を設定
2. PlayerとCameraの初期位置の差分を計算して、相対距離を求め、offset変数に入れる
3. 現在のPlayerの位置を取得し、求めたoffsetの分加算してcameraの位置を設定する
アイテムの作成
カプセル(Capsule)オブジェクトをアイテムとして作っていく。同じオブジェクトを複製するには、prefabとして書き出すと便利。以下はVisiual Scriptingでの制御
- Capsule ColliderのIs Triggerをon(チェック)することで、接触したことを検知できるようになる
- OnTriggerEnter Event ユニット上の接触対象タグが"Player"であれば、オブジェクトを削除するフローを作る(Playerオブジェクトにタグ「Player」の設定も必要)
残アイテム数の表示
- UIの表示はCanvasオブジェクトが必要。今回は数値をTextオブジェクトで表示
- Canvas Scalerの設定によって表示のされ方が異なる
- Constant Pixel Size:画面サイズによらず、サイズが固定(ピクセル基準)
- Constant Physical Size:画面サイズによらず、サイズが固定(実単位基準)
- Scale With Screen Size:画面サイズ(解像度)によって拡大・縮小される。画面内でのGUIバランスが保たれる。今回はコレ。横幅と縦幅どちら/または両方を基準に拡大・縮小するかなども設定する。
- Item数をカウントするためにItemタグを作成し、ItemオブジェクトにItemタグを設定。
- GameControllerオブジェクトを作成し、ITemタグをカウントし、表示先のScoreLabelにテキスト表示させるグラフを作成
クリア時のUIの表示
ぶつかってはいけない壁の作成
- Material内Emissionにチェックを入れると発光するオブジェクトが作成できる。ちなみに、「Post Processing」パッケージを入れるとより自然な発光を表現できるそう。(光が滲む感じ)
参考:【Unity】Post Processing(ポストプロセス) を使って画面演出をリッチにする - Inspectorビューのstaticにチェックを入れると、動かないオブジェクトとして処理が最適化される。
参考:静的ゲームオブジェクト - ライト(太陽光)の輝度はInspectorビューのIntensityで変更できる
- ヒエラルキービューでBox ColliderのIs Triggerをon(チェック)することで、接触したことを検知できるようになる
- グラフを作成。アイテム取得と同様に、On Trigger EnterユニットでPlayerとの接触を検知。現在のシーンを再読み込みするのもそれに応じたユニットが存在(SceneManagerユニット)
以上で完成。
結構楽しめました。