💬
[Godot Engine]逆引きリファレンス(個人メモ)
ツリーの中から特定ノードを検索して取得
子ノードを検索するだけなら割と簡単。
func _find_child(_parent:Node, _name:String) -> Node:
for _node in _parent.get_children():
if _node.name == _name:
return _node
id
がわかっていればget_child(_id:int)
でOKだが、孫以下のノード取得がしにくいので、ツリー全部を検索したい場合は以下
func _find_in_tree(_parent:Node, _name:String) -> Node:
for _node in _parent.get_children():
if _node.name == _name:
return _node
if _node.get_child_count() > 0:
var _child:Node = _find_in_tree(_node, _name)
if not _child == null:
return _child
return null
これだけだと、名前が被っている孫ノードの場合は最初に見つけたノードが返ってくるので、名前を必ず固有のノードで構成するか、この関数自体を少しカスタマイズする必要がある。
find_node( )
ツッコミを受けて改めて調べたところfind_node()
関数が存在していました。
実際に試してみました。
func _ready():
var _node = _parent.find_node("target_node")
上記だけで_parent
で定義しているノードのツリーの中からtarget_node
という名前の子孫を見つけてくれます。
このほうがはるかにシンプルですね。
※情報提供ありがとうございました @トカゲ
特定の数値をループする
よくあるのが、0,1,2,0,1,2...
などと繰り返したい場合に使う関数。
var n = 0
n = wrapi(n+1, 0, 3)
上記は簡略化して書いているので、処理に入るとn
が初期化されてしまうけど、
wrapi
またはwrapf
で数値が繰り返されるようになる。
メニューの選択状態などで使うと便利。
Discussion