色々試していたところ、
「自分自身をヴィジュアルスクリプトで動かすことはできない」が、物理によって動き、ヴィジュアルスクリプトで判定などを行うことができるゲームオブジェクトをスクリプトで実現できたため共有させてもらいます。
あくまでできたので共有してみる程度で実用にはもう少し検証などがいりそうだとは思います。
◆ゲームオブジェクト本体
go_physics_controller.zip (6.6 KB)
◆ファイルの中身
固有の内容は、GOcontrollerとそのスクリプトのみです。
このオブジェクトを読み込み、シーンに配置するとぽよんと跳ねます。そして、このオブジェクトは何らかのオブジェクトと接触すると消滅するようにヴィジュアルスクリプトが設定されています。
物理挙動の設定は「RigidBody2D」及びその子である「CollisionShape2D」で設定します。
RigidBody2Dのプロパティで質量や物理マテリアルのオーバーライド(摩擦、Bounce)などを設定することで跳ね方などをかえることができます。
◆GDScriptの簡単な解説
Godotの物理オブジェクトである、「RigidBody2D」の動きを、強制的に親ノードである「GameObject」に反映するという仕組みで実現しています。
本来、「子ノードの動き」は「親ノード」に影響を与えないため、単純にRigidBody2Dを子とするだけだと、RigidBody2Dが親を離れて勝手にどっかにいってしまいますが、このスクリプトを設定することで一緒に動くようになります。
◆備考
- このゲームオブジェクトのレイヤーは2、マスクは2となっているため他のオブジェクトで接触判定を取りたい場合はレイヤーに気をつけてください。
- 逆に、RigidBody2Dのレイヤーは1、マスクは1となっています。
◆実用例
- プレイヤーオブジェクトが触れると何らかの動作をする物理的なオブジェクト
- ダメージを与えてくる物理的なガレキ
などを作れます。(多分)
◆発展実用案
- スクリプトでうまくadd_forceをする、AnimatableBody2Dをうまく使うといったことができればプレイヤーでこのオブジェクトを押すといったこともできるようになるかもしれません。
