要約
実行時にCollisionShapeの形状を変更する方法がちょっと見当たらないので調べました。
はじめに
CollisionShape2Dはメンバー変数にShape2DクラスのShapeを持ちますが、このクラスは抽象基底クラスのため具体的なパラメータを持っていません。Shape2Dから派生した先の何れか(この場合CircleShape2D)にダウンキャストする事で、半径相当のRadiusにアクセス可能になります。
環境:Godot4.1+ C#(.Net Framework6.0)
サンプルノード
サンプルコード
_collisionShapeは_Ready()でキャッシュしたCollisionShape2Dノードです。LevelUp()で円形の衝突形状の半径を変更しています。
private CollisionShape2D _collisionShape;
public override void _Ready()
{
_collisionShape = GetNode("CollisionShape2D") as CollisionShape2D;
}
public void LevelUp()
{
_level++;
CircleShape2D circle = _collisionShape.Shape as CircleShape2D;
circle.Radius = getRadius(_level);
}
private int getRadius(int level)
{
return level * 4 + 4;// lv1 = 8, lv2 = 12, lv3 = 16
}
動かしてみた
Collison表示を有効にしました。実行時に大きさが変わっている事が分かります。