江上宿六です。
前回の処理周りを少しまとめてみました。
一番近いタグ付きのオブジェクトを探す処理を関数化しました。 foreach文と
FindGameObjectsWithTagでObjectタグのついたオブジェクトを探したら
Vector3.Distanceを使っての距離を測り比較し、一番近いオブジェクトを返します。
OnTriggerを使って一番近いオブジェクトがキャラの持つ判定用のColliderと
重なっているか判定してます。 正確には少し違います、表現的な面では。
その状態を取得できる関数です。 これらを使って操作をしていきます。
とりあえず持ち上げたり降ろしたりするアニメーションを作ったので、
それに合わせてオブジェクトを動かしてみたいと思います。 持ち上げて運ぶ
みたいな事を実現するには親子関係を設定するのが簡単だと思います。
これは持ち上げるボタンを押した時の処理ですが、まず対象のオブジェクトが
範囲内にあるかを調べ、あれば持ち上げるアニメを再生させています。
アニメはともかく持ち上げ対象のオブジェクトを取得し、そのtransform.parentに
キャラのtransformを代入します。 これだけで親子関係の設定が出来ます。
だいたいやってみた結果ですが、親子関係が設定されたのでキャラと連動して
動く様にはなりましたが、流石にこれでは持ち上げてるとは言えませんね。
アニメーションを使って持ち上げている感を出したいと思います。
判定内での処理をこのようにしました。 説明すべき事は多いのですが、
まずは持ち上げられるオブジェクトの位置をliftの位置にしています。
liftはキャラの子である空のオブジェクトで、キャラの前方に配置されています。
持ち上げられるオブジェクトとこのliftに親子関係を設定し、liftをアニメーションで
動かす事で持ち上げているように見えるようにしました。 最後のLiftUpは
単純にSetBoolを行わせる関数を呼んでいます。
オブジェクトそのものをアニメーションさせれば良いのではと思っていましたが
どうにも上手くいかず、苦し紛れに思いついた方法です。 親子関係の位置情報と
アニメーションの位置情報が混ざり合ってそれはもう大変でした。
このようになりました。 とりあえず持ち上げている感は出ていると思います。
置く時もキャラのアニメーションと同時にliftを置くアニメーションを再生し、
その終わるタイミングでtransform.GetChild(0)のparentをnullにしています。
このGetChild(0)はそのオブジェクトの0番目の子を取得するもので、これは
liftにアタッチしたスクリプト内で行っているので、liftの0番目の子を取得できます。
そのparentをnullにする事で親子関係を切ることが出来ます。
gifでは親子関係が切れたのは確認出来ませんが、問題なく動いています。
今回はこんな感じです。 次回以降何をするかは、とりあえず未定ですが
持ち上げたオブジェクトを投げたり、しまったりみたいな感じがやりたいですね。