1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Godot EngineAdvent Calendar 2023

Day 20

Godot(C#)実行時にCollisionShapeの形状を変更する(小ネタ)

Last updated at Posted at 2023-12-19

要約

実行時にCollisionShapeの形状を変更する方法がちょっと見当たらないので調べました。

はじめに

 CollisionShape2Dはメンバー変数にShape2DクラスのShapeを持ちますが、このクラスは抽象基底クラスのため具体的なパラメータを持っていません。Shape2Dから派生した先の何れか(この場合CircleShape2D)にダウンキャストする事で、半径相当のRadiusにアクセス可能になります。

環境:Godot4.1+ C#(.Net Framework6.0)

サンプルノード

scene scene

サンプルコード

 _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表示を有効にしました。実行時に大きさが変わっている事が分かります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?