弾を発射する 2

記事作成 2019年6月
PlayMaker 1.9.0 / Unity 2018.2.6f1

「弾を発射する 1」 の続きになります。重複する部分は省略しているので
前回のエントリを見た上で読むことをおすすめします。

今度は、DOTween とグローバル変数を使って弾を飛ばします。
この動画では、前回との違いはわかりにくいでしょうか。

----------------------------------------------
シーンビューで。
前回のように[Add Force] で力を加えられて飛んでいるのではなく、
目標を定めて、そこへ向かって移動しています。

----------------------------------------------
目標に向かって飛ばすために、出現位置の先に、目標となるオブジェクトを置いています。
緑の玉です。 「Sphere弾出現位置」をコピーするといいでしょう。インスペクタの設定は同じです。

----------------------------------------------
プレハブ化して飛ばす弾を作ります。前回のものと同様、Sphere にRigidbody を付けたものです。

----------------------------------------------
弾の状態遷移も、はじめのノードの中身を変更しただけのものになります。
アクションは
 [Do Tween Transform Local Path] のみです。
なぜDOTween かは PlayMaker Tween事情 のエントリをご覧ください。

これは、パスに沿ってオブジェクトを移動させるアクションです。
図のように、目標、到達時間などを設定します。

DOTweenは、多機能な分、設定項目も多く戸惑ってしまいがち。
Ease Type は様々な動作パターンを設定できます。弾丸が球でなく形に前後があれば
上の、Look At  なども調節します。

その後は、「自己消滅」に遷移し [Destroy Self] で自分を消去します。

----------------------------------------------
どうでしょう、再生すると目標まで飛んでいくでしょうか。

----------------------------------------------
無事飛んでいくのを確認したら、プレハブ化します。

----------------------------------------------
 前回の、Sphere弾の発射を管理した状態遷移を使います。
状態「弾出現」の選択 Game Object のみ今作ったプレハブに変更します。


そして、再生してみても、弾は飛んでいかないと思います。
これは、プレハブ化したときに問題が発生した結果です。

----------------------------------------------
あらためてプレハブを確認してみると、パスの目標が未設定になっています。
プレハブ化したオブジェクト上のアクションからは、シーン上のオブジェクトを認識できません。
弾は目標を見失っているのです。

ではどうするか。
----------------------------------------------
変数は使えますが、プレハブの状態遷移内のローカルではやはり無理なので、
グローバル変数を使います。グローバル変数の作り方
[g_gobj 弾目標位置代入] とでも名前をつけ作成します。

----------------------------------------------
そして、ゲーム開始直後、この変数に弾の目標位置が代入されるようにします。

図では、空オブジェクト「emp 開始時グローバル変数代入」の状態遷移で
[Set Game Object] を使い、弾目標位置を代入しています。

----------------------------------------------
弾プレハブのアクションに、作成したグローバル変数を設定します。


今度は、未設定になりません。

注意することは、ゲーム開始直後、グローバル変数に値が代入されるのに
わずかながら時間がかかるということです。
なので、グローバル変数の値を使って機能させるような仕組みは、開始後
その分の間を必要とすることを、考慮しなければなりません。

----------------------------------------------
カメラの動き の追随カメラを付けてみると、このように。


0 件のコメント:

コメントを投稿