目次
はじめに
今回の記事も前回同様、課題点の修正から取り掛かっていきたいと思います。その後前回記事で出来なかったカメラワークの設定を行いたいと思います。
ドミノ倒し成功!
さて、本題に入っていきますが、前回記事の最後でドミノ倒しを実現できたのですが、衝突の影響で玉の速度が低下し想定していた動作とは違う結果になってしまいました。今回こそは綺麗なドミノ倒し実現させてみます!
※下の画像は前回記事でのドミノ倒しの結果です。
前回の失敗の原因は、衝突の判定後の玉の速度低下ということは、画像からもお分かりだと思います。まずこの部分の設定から進めていきます。玉の速度を上げるにはどうすればよいかということで、下記の二点を考えました。
- もっと急な坂を作って加速させる
- 玉が滑る場所と玉との間の摩擦を減らす
一点目は、現状でもかなり勾配をきつくしているのでそれほど変わらないかと思いました。二点目はあまり着目していなかった箇所でしたので、こちらは効果がありそうな気がします。設定としてはProjectの下のCreate→Physic Materialを作成します。
作成したPhysic Materialの中身が下記画像のようになっています。数値を設定できる3項目で摩擦の設定が出来ます。 Dynamic Frictionは動いている時の摩擦の値、 Static Frictionhaは静止時の摩擦の値、Bouncinessは跳ね返りの力を表します。今回は摩擦がなく、滑るように設定したいのですべての項目を0にしています。また下のプルダウンの箇所はMinimumにすることで、オブジェクト同士の摩擦の設定を摩擦係数の低い方を優先するようにできます。これでスムーズに加速して進むことが出来ます。
この設定後ドミノ倒し後も止まることなくスムーズに動いたのですが、ドミノの落ち方が不自然だったので、こちらの修正もおこないました。
ドミノ倒しに使う各板に動作制限を設けます。設定の仕方は前回記事で設定したRigid Bodyの設定欄のConstraintsという箇所をいじります。Freeze PositionとFreeze Rotationでオブジェクトの動きと回転を制御できます。今回はz軸に回転する動作を制御すると自然な動きになりました。急な勾配にオブジェクトを配置するなどの際にも、有効活用できると思います。
設定後、動作検証してみた画像が下記になります。非常に勢いよく滑っていく感じが見ていて楽しいです。板に当たった衝撃でボールが若干左に逸れていますが、とりあえず目的としていた動作は確認できたので、ここは一旦置いておきます。
カメラワークの設定
先ほどの動作検証の画像もカメラワークを設定していないため、遠くから全体を映すしか方法がなく、あまり迫力のあるものにできませんでした。これからさらにコースも長くなる予定ですので、予定していたカメラワークの動作設定を行いたいと思います。イメージとしては玉についていきながらも、コースを滑っている感じも見れるようなものにしたいと思います。
using System.Collections; using UnityEngine; public class FollowBall : MonoBehaviour { public Transform target; // ターゲットへの参照 private Vector3 offset; // 相対座標 void Start() { //自分自身とtargetとの相対距離を求める offset = GetComponent<Transform>().position - target.position; } void Update() { //自分自身の座標に、targetの座標に相対座標を足した値を設定する GetComponent<Transform>().position = target.position + offset; } }
カメラワーク設定に関して、調べてみたのですが、この部分はノンコーディングでは思っている動作ができないということでコードを書くことにしました。最後までノンコーディングで作成できればよかったのですが…
もし、ノンコーディングでも動作設定できる方法があれば教えていただきたいと思いました。
オブジェクトにC#のScriptを設定する方法ですが、ProjectのCreateからC#Scriptをクリックします。
Scriptの名前を編集して、コードを書いたらScriptの出来上がりです。Scriptをダブルクリックすれば、VisualStudioが開くと思うので、そちらでコードを書いてください。
作成したScriptをMain Cameraに設定します。Main CameraのComponentを開き、Add Componentの検索から作成したScriptを探します(今回はFollowBallというScrptにしたので、それを探します)。検索結果をクリックすれば、Componentに追加されます。
Componentに追加されたScriptを見てみると、Targetという項目が表示されていると思います。そこにオブジェクトを配置することができるので、対象のオブジェクトをドラッグ&ドロップすれば設定は完了です。
コードの内容としては、対象物を設定して、そのオブジェクトとの距離を絶えず一定にするように設定しています。対象物を設定するだけでも追いかけていきますが、迫力はあっても何が起こっているかがわからない感じになります。
※実際検証してみたのが下記画像になります。
何が起こっているかよくわからないですね(笑)これを解消するために相対距離を求めて、動きのたびに更新するように記述してます。Unityの公式サイトで非常にわかりやすく説明していたので参考にさせていただきました。
https://unity3d.com/jp/learn/tutorials/projects/hajiuni/moving-the-camera?playlist=45986
設定後の画像が上の画像になります。ようやくゲーム感が出てきたように感じました。まだまだ全体のボリューム感がないので、オブジェクト等増やしてクオリティを上げていきたいと思います。
次回予告
次回はオブジェクトを作成していき、もっと面白いコースを作る段取りをしていきたいと思います。また、オブジェクトに少しだけ色を付けてみたのですが、こちらの設定に関してもご紹介していきます。