ぬーぶのメモ帳

フリーゲームエンジン「Godot」でプログラム経験のない素人の備忘録 最近は色々な動作を考えて試すのが好き。

【Godot】障害物判定のオンオフ

CollisionShape2D

Staticbody2Dで障害物の当たり判定を任意でオンオフさせたい時

これをスクリプトで制御した際Disabledをオンにした後、再度当たり判定を復活させた時に復活した当たり判定が機能しませんでした。
ダメな例

if not switch:
		CollisionShape2D.disabled = true
		switch = true
	else:
		CollisionShape2D.disabled = false
		switch = false



単純にdisabledをfalseにするだけではダメで、
set_deferred(インスペクタータブのプロパティ名, 対応した変数)を使用する必要があるとの事
成功例

【11/15】追記:Area2Dにて同様の方法でスイッチを作った所機能はするものの、赤文字のエラーが出たのでset_deferred()をtrue側にも使う方が良さそう。

if not switch:
		CollisionShape2D.set_deferred("disabled", true)
		switch = true
	else:
		CollisionShape2D.set_deferred("disabled", false)
		switch = false

消える足場のようなものを作る時にも同じ設定が必要になると思われます。

また当たり判定を再利用しないのならqueue_free()で対象オブジェクトを削除するのが一番簡単です。

	Object.queue_free()