見出し画像

【Godot】 勉強メモ Part1


はじめに

メモしておきたくなったことをつらつらと書くだけの記事です。プログラミングやゲーム制作に詳しくないので、表記が揺れたり内容が正しくなかったりすると思います。

Area2D と CharacterBody2D の 衝突判定

CharacterBody2Dが、Area2Dに当たったかを判定したい時。

Area2Dとの判定はシグナルでやる模様。
Area2D以外のコリジョン系のノード(StaticBody2Dとか)だったら、CharacterBody2D側で用意されているget_last_slide_collision()を使うなどして、Characterが何かにぶつかった?という見方で判定できるが、それはできない。Area2Dに誰かがぶつかってきたが、それはCharacterBody2Dなのか?という見方で判定した。

というわけで、Area2DのシグナルにCharacterBody2Dを接続して、CharacterBody2Dのスクリプトで以下のような感じで判定。

func _on_area2d_body_entered(body):
    # Area2D に対して当たったノードの名前が自分の名前と同じ
	if body.name == name :
		print("Hit")


M1Macで特定のプラグインを使おうとした時のエラー

M1Mac環境で開発していて、Godotで公開されているとあるプラグインを使おうとした時に、 エラーが出た。
そのプラグインではGDExtentionを利用したライブラリ(.framework)が使われており、have 'x86_64,arm64', need 'arm64'というようなエラーにより、ライブラリが正しく読み込めていなかった。

Apple Silicon的な問題と予測するくらいは出来たので、結果的に、ライブラリをM1環境で改めてビルドし直して使えるようになった。が、どういう仕組みでM1非対応になってしまっていたのかまで調べて理解する余裕は無かった。

Control系ノードを中央基準でTweenで拡大縮小させるには

例えば、クリックしたら真ん中を中心に、ボヨンと拡大するボタンとか。
Control系ノードにはpivot_offsetという値が存在する。
これに size / 2 を入れれば中央基準になる。
そしてあとはscaleをアニメーションさせるだけ。

# ready() 内
Button.pivot_offset = Button.size / 2

# ボタンが押されたタイミング
tween.tween_property(Button, "scale", Vector2.ONE * 2, 5.0)

しかしデフォルトでは、ガクガクとぎこちない拡大縮小になってしまう。
その場合は、
プロジェクト設定>GUI>一般>コントロールをピクセル単位でスナップ
これをオフにすればスムーズに拡大される。

逆に、ピクセル単位でスナップさせたいというのがどういう状況かはわからない……。ちなみにその場合は、Control系ノードを無理やりNode2Dの子とすれば、スムーズに拡大され、とりあえずの回避策として使える模様。

定石があるとは思うが何もわからないし英語がわからなくて何もわからない……。


この記事が気に入ったらサポートをしてみませんか?