本講座はUnityで3Dアクションゲームの作り方について説明していきます。前回はプレイヤーが攻撃できるようにするまで解説してきました。
前回の記事:
第4回目は攻撃処理に加え、キャラクターをジャンプできるようにしていきます。
また、本講座だけでなく、あらゆるゲーム開発に役立つ汎用的なコライダーイベントスクリプトの作り方も解説します。とても便利なスクリプトなのでぜひ作り方・使い方をマスターしてくださいね。
ジャンプ機能の作成
今回のジャンプ機能は、攻撃と同じようにUIボタンを配置してそれを押したらジャンプできるようにしていきます。
ボタンの設置
では、攻撃と同じようにボタンを設置していきます。
「Anchor」や「Pivot」の設定も攻撃ボタンと同じでコピーして作成し、位置、大きさだけずらしていきますので、ざっくりとした解説になります。
前回の記事を見ていない方は前回の記事を読んでみてください。
前回の記事 :
まずはHierarchyから「Canvas/Button」を選択し「Ctrl + D(Macはcommand + D)」で複製します。
Buttonの「RectTransform」を下記のように設定しましょう。
1 2 3 4 5 6 7 8 |
ButtonのRectTransform Anchor Preset : 右下 PosX : -250 PosY : 30 PosZ : 0 Width : 100 Height : 100 Pivot : X : 1 Y : 0 |
そして、ボタンの子に有る「Text」オブジェクトの「Text」コンポーネント「Text」の項目で文字を「J」と変更します。
この段階ではまだ押しても攻撃処理が動きますのでご注意下さい。
RigidBody、Colliderの設定
ここで、3Dゲームを作成する際に重要なコンポーネント「RigidBody」「Collider」を解説していきます。
まず「RigidBody」はゲームオブジェクトを物理特性によって制御できるようするためのコンポーネントです。
重力や空気抵抗といった物理現象を表現するためにはこのコンポーネントが必要になります。
「Collider」は「BoxCollider」や「SphereCollider」など種類がありますが、物理的な衝突を表現する、検知するためのコンポーネントです。
ゲームオブジェクト同士が衝突して跳ね返る、一方がもう一方の中に侵入するといったときに使用します。
では、ここでプレイヤーがジャンプするために必要なものを考えてみましょう。
まずは、ジャンプの前に地面に立っていないといけませんので、プレイヤーに重力がかかり、地面でと接触してそれを受け止めて「地面に立っている」という状態を作ります。
それには、プレイヤーに「Collider」と重力を受けるための「Rigidbody」、そして地面にプレイヤーを受け止めるための「Collider」が必要になります。それらの設定をしていきます。
まずプレイヤーに「Rigidbody」コンポーネントを付与します。
Hierarchyでプレイヤーを選択し、Inspectorの「Add Component」をクリック。
ウィンドウの検索欄に「RigidBody」と入力し、下の欄に出てきた「Rigidbody」をクリックして完了です。
そして、パラメーターの下記の部分を変更しておきましょう。Constraintsをクリックすると「Freeze Position」「Freeze Rotation」が出てきます。
1 2 3 |
Mass : 5 Constraints : Freeze Rotation X : true Y : true Z : true |
重要な項目についてのみになりますが、簡単に解説しておきます。
Mass | 物体の質量 (Kg) |
Drag | 空気抵抗 |
Angular Drag | 回転に対する空気抵抗 |
Use Gravity | 重力の影響を受けるかのフラグ |
Is Kinematic | 物理的な影響を受けるかどうかのフラグ |
Freeze Position | 各軸の位置の移動の停止 |
Freeze Rotation | 各軸の回転の停止 |
今回は、「Mass」つまり質量の設定と、「Freeze Rotation」で回転を停止する設定を先に行っています。
次に「Collider」の設定です。
今回の記事は以上です。
次回は移動処理を作成していきます。
次回の記事 :
コメント
地面検出のための設定の説明で肝心のタグを設定する画像がないのでEnvironment以下のどれをタグに設定すれば良いのか分かりません
コメントありがとうございます。
既にどこを選択するか示した状態の画像自体は掲載していますが、
間に異なる画像と手順解説が入っていたので改めて再掲しておきました。