接触の判定

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

アクションゲームだけでなくても、オブジェクト同士の接触の判定は必須ですね。
今回は、こんなふうに
左下の [スイッチ] に接触すれば、右上の [トビラ] が回転する。
という仕掛けを作ってみます。
操作キャラは、例のごとく「十字キーで移動」のカプセルを使用します。 1~9

----------------------------------------------
1) 基本形のCubeをつぶして板状にしたオブジェクトをスイッチ、トビラに見立てています。

----------------------------------------------
2) 「スイッチ」にこのように「状態」、「アクション」を付けます。
[Trigger Event] は他のオブジェクトの接触を感知するアクションです。
On Trigger (enter)は接触、(Stay)は接触状態の維持、(Exit)は離れたことをそれぞれ
感知してイベントに脱出します。

----------------------------------------------
3) 感知するには、トリガが必要です。トリガはコライダから設定して作りますが、
今回は、Cubeにはじめから付いているコライダに、もう一つ追加してそれを
トリガとします。

-----------
「はじめからあるコライダ」を少し小さめに
「追加したコライダ」を大きめに変更します。

「はじめからあるコライダ」をトリガにした場合でも感知できますが、
コライダのない(キャラクターがスイッチを突き抜ける)状態になります。
 ----------------------------------------------
4) もう一つ準備を、[Trigger Event] は感知するオブジェをTagで識別するため
先程の設定どおりにするのであれば、

操作キャラクター「cupsule」のTagをPlayerにしなければなりません。

(また今回のようにキャラクターコントローラ付きのオブジェは例外ですが
 通常のオブジェの場合 【Rigidbody】 コンポーネントを付ける必要があります。)
----------------------------------------------
5) 次はトビラ側の設定。
このようにノード、アクションを。「回転する」はおなじみ?の[Rotate]
開始時の[idle]と[回転停止する]はアクションなしで構いません

----------------------------------------------
6) イベントを2つ作り、左のチェックを入れグローバル化します。
はじめてグローバルイベントを作る場合、ポップアップが出ますが、そのままOKで。
それぞれの「状態」へ上図のように「グローバルイベントを追加」 します。

(注)これ実はイベントをグローバル化しなくても「グローバルイベントを追加」できてしまう
のです。「イベントのグローバル化」と「グローバルにイベントを追加する」という
意味がイコールでなかったり、ちとややこしいのですが、いずれ慣れるとわかるので
今はそんなもんだと思って流してください。
----------------------------------------------
7) スイッチ側の設定に戻ります。キャラクターが接触した後に遷移する「状態」に
[Send Event] を付け、ターゲット(イベント送信先)に「トビラ」をドロップ

送信するイベントの選択肢に、「トビラ」で作った [回転] があるので、選びます。

----------------------------------------------
8) 色の変化は、なくても動作には関係しません。
変化させる場合は、適当なマテリアルを作ってスイッチのCubeに適用しておきます。
そして [Set Material Color] で、色を変化させる事ができます。

----------------------------------------------
9) 更に、このように、ノード、アクションを組み


接触ごとに、回転とストップが繰り返されるようにします。

----------------------------------------------
再生してみます。スイッチのノード

トビラのノード、がこのように連携して作動しているのがわかります。

----------------------------------------------
今回の方法は、あくまで一例で、送信イベントを受け取った
トビラ側で状態をチェックして動作を切り替える、等
実現方法はさまざまです。

また、トリガでなく、コライダだけで接触を取る
[Collision Event] もあります。今回はそっちでもよかったかもしれません。
状況によって選択していくことになります。

0 件のコメント:

コメントを投稿