【Godot4】unityからの移行奮闘記~DAY 1~【備忘録】
DAY 1:ブロック崩しゲームの作成
初めに
unityを9年も触ったおっさんだけど、unityだけに凝り固まるわけにもいかないしGodot4というオープンソースのゲームエンジンに手を出すことにする。まず最初にやらなければいけないことーどう考えてもゲームを1個完成させて操作に慣れることだろう。と、いうわけでブロック崩しをチュートリアル丸パクリで作ったので、その際に「unityだったらこうだったなぁ」ということをまとめようと思う。参考にしたTutorial:https://www.peanuts-code.com/ja/tutorials/gd0004_breakout/
キャラクター動作編
unityでは基本的に2Ⅾでキャラクターを移動させる際(トップダウン)、2つのコードの書き方があった(はず)。忙殺されてそれすらも怪しいの怖い。
#1つ目
public float speed;
if(Input.GetKey(Keycode.好きなコード)){
transform.Translate(speed,0,0);
}
#2つ目
public float speed;
Rigidbody2D rb;
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
Vector2 direction = new Vector2(x,y);
rb.velocity = direction * speed * Time.deltatime;
前者はキーコードすべてに対して記述をしなければいけない上に、古の√2走法が出来てしまうため基本的に後者を使用していました。SOREGA‼(それが)godot4だと
@export var speed:int = 150
if Input.is_action_pressed("コード"):
direction.x = 1
こうなるんですよ(号泣)。どうやら、unity→Godot4では
Scene→Scene
Prefab(Resources)→Scene
Component→Node
public→@export
GetKey→is_action_pressed
となるようです。うーん。なかなか変わりますね言葉やら書式が。というかSceneという単語1つでunityの中の2つの意味を包括してるのがやばい。コンポーネントに関しては
○○ collider 2D→Collision Shape 2D
となるらしい。Collision Shapeのインスペクターからどうやら形を指定できるっぽい。とっても便利(^▽^)/。Collision Polygon 2Dもあるけどこれは恐らく複雑な形向けでしょう。Polygon collider 2D的な。
ボール発射編
ボールはRigidbody2Dというコンポーn…ノードを使って作成する。PhysicsMaterialを新たに設定した場合、その設定したPhysicsMaterialをインスペクター上でクリックしないと追加項目(摩擦など)が出てこない。あと気になったのはLinearという項目の中にDampというものがあるんだけど、これが正の実数だとボールが減速するらしい。なんやねんこれ。
Godot4で使う言語がpythonベースだから、関数内に処理を入れないとエラー吐かれる。だからとりあえずpassを入れておこう。normalizedはunityでもお馴染みベクトルの正規化です。要は指定した方向の情報を持つ単位ベクトルを作成するって訳。問題は次。unity→godot4を見ると
(Rigidbody2D).Addforce(向き(速度含む),力の種類)→apply_impulse(向き(方向を含む,position(謎)))
となっていることだ。これ多分ForceMode.impulseだったらこうなるってだけだろうなぁ(遠い目)。とりあえず謎に包まれてるpositionはVector2.ZEROで(0,0)指定しておけば何とかなるみたい!
DAY 1を終えて
え?もう終わり?と思ったそこのあなた。すみません終わりです(懺悔)。大学生だからやっぱりね?大学の勉強優先でやると、このくらいの時間しかかけられないんですよ(涙目)。というわけで今日のGodot勉強時間は約1時間40分!いやぁ大変良い時間管理なのではないでしょうか(自惚)。Godot4、かなり難しいけど、やはりやる価値はある。それに腰が重いプログラマーほど淘汰される人種はいないから、やらないといけないよね。では次の記事でお会いしましょう。