Unity初心者向けに、公式がチュートリアル集を出しているようだ。
Unity初心者向けチュートリアル集 – Unity Learn
内容は、以下の通り。
- 玉転がし
- パズル
- FPS
- RPG
- 3Dゲームキットライト
- John Lemon’s Haunted Jaunt:3D入門
- 3Dインタラクティブ開発入門
- レゴ®マイクロゲーム
- 3DゴーカートレースのMicrogame
- 2DプラットフォーマーのMicrogame
- FPS Microgame
- Create with Code
ここでの玉転がしは、私が1、2日目でやっていたものとは違い、操作可能なちゃんとしたゲームだ。
とりあえず玉転がしからやっていこうと思う。
新しいシーンを作成
File→New Sceneで新しいシーンを作った。
File→Saveでシーンを任意の場所に保存。
床と壁
床を設置。床の色の変更。
壁を設置。1つを設置しサイズを決めたらDuplicateで複製し、4つ配置。

玉を操作可能に
金玉を中央に配置。
金玉のオブジェクト名は「player」にした。
この金玉をプレイヤーが操作できるようにする。
金玉のInspectorタブにおいて、
Add Component→Visual Scripting→Script Machine→New→ファイルを保存
Script Graphのファイルを保存していくフォルダを作成してそこに保存しておくと良い。

その後、On Fixed Update、Input.Get Axis、Rigidbody Add ForceというNodeを追加。
手順通りそれぞれ繋げたのだが…
なぜかエラーが。

「Target Invocation Exception:Exception has been thrown by the target of an invocation.」というエラーが出た。
色々調べた結果、Input System Packageが有効となっており、Input Managerが無効になっていたことが原因だった。
Edit→Project setting→Player→Other Setting→Active Input Handingの項目をBothにした。
Input Managerが旧版、Input System Packageが新版といった感じのようだ。

Inspectorビューから金玉の速度を調節できるようにする。
RigidbodyにあるVariablesにSpeedという変数を追加。
それをScript Graphにドラック&ドロップ。
MultiplyのBの入力部分に接続させれば完成。

当たり判定に異常発生
金玉を動かすことには成功したが、矢印キーで操作するとなぜか金玉が落下。
RigidbodyもColliderも入ってるんだけどなぁ…。
Planeの中央部分にしか当たり判定がない様子。

色々試してみたが、PlaneのMesh ColliderのConvexの項目に✓を入れたら解決した。
なんでだろう…。
Convex
これをチェックすると、Convex (凸状) を有効にする。有効にすると、このメッシュコライダーは他のメッシュコラーダーと衝突可能になる。凸状のメッシュコライダーは、三角形の面の上限数が 255 に制限される。
カメラの追従
カメラが金玉を追従するようにする。
Hierarchyタブにおいて、Main Cameraをplayerにドラック&ドロップ。
Main Cameraがplayerの子オブジェクトになった。
金玉を転がしてみると、視界がグルグル回る~。
これは、ボールの転がりに合わせてカメラが追従しているから。
とりあえずMain Cameraは元に戻した。

この視界の回転を直すため、プレイヤーを追従するグラフを作成。
Main CameraにScript Graphを新しく作成した。
VariablesにTargetを追加、TypeはGame Objectで、Valueはplayer。
そして、そのTargetをScript Graphにドラック&ドロップ。

Main Cameraの位置を変更するため、Transform:Set PositionというNodeを追加。
Playerの位置を取得するため、Transform:Get PositionというNodeを追加。
以下のように繋げる。

このままだと、金玉の視点でプレイすることになってしまう。
金玉とカメラの間に距離を置き、第三者視点にする。
On Start Eventを利用し、開始と同時に相対距離を設定するらしい。
Graph Variablesにoffsetという値を追加、TypeはVector3。
グラフに、Set Graph VariableというNodeを追加、値をoffsetに変更。
Subtract(in Math/Vector3)というNodeを追加。ベクトルの引き算をするためらしい。
Transform Get PositionやらGet Variableやらを追加し、接続。

今度は、先ほどのものをいじる。
Graph Inspectorにあるoffsetをグラフにドラック&ドロップ。
Add(in Math/Vector3)というNodeを追加。
以下のようにグラフを組みなおす。

すると、上からの視点のままカメラが金玉を追従!!
