Godotで作るSuper Mario Bros Part6(敵の雛形を用いてGoombaシーンの作成)

さて今回は、前回作成した「敵の雛形」を用いてGoombaシーン(クリボー)を作成していく。

Enemyシーンを継承してGoombaシーンの作成

左上部メニュー「新しい継承シーン」をクリック

「ベースのシーンを開く」で「Enemy.tscn」を選択し開く。  Enemy.tscnの場所は、res://Scenes/Enemy.tscn

シーンが作成されたので「Enemy」ノードを「Goomba」に変更し、保存する。res://Scenes/Goomba.tscn

Goombaシーンの各ノード設定を更新

継承したノードはルートノード以外は黄色で表示されているので、これからGoomba用に設定する。ここから先は、画面センター上部メニューを「2D」に切り替え画面で確認しながら行う。

Sprite2Dの設定

ファイルシステムドックの「Goomba.png」ファイルを右端インスペクターの「Texture欄」へドラッグアンドドロップする。

Animation Hframes:3 Vframes:1に指定する。

Texture欄の右端のチェツクをクリックし、ユニーク化しておこう。これは、継承元「Enemy.tscn」に影響を与えず「Goomba.tscn」独自の設定を確保するためだ。

ドット絵の表示

上記の絵では、インポートの際自動的に補正されエッジの聞いた画像ではなくぼやけた画像に補正されるため修正を行う。インスペクター「CanvasItem」>「Texture」>Filterで「Inherit」を「nearest」に変更すれば良い。

CollisionSharpe2Dの設定

シーンドックで「CollisionSharpe2D」を選択、インスペクター「CollisionSharp2D」>shape>「CircleShape2D」を設定し、Radius:8にする。もちろんユニーク化しておこう

Area2DのCollisionSharp2D設定

シーンドックで「Area2D」>「CollisionSharpe2D」を選択、インスペクター「CollisionSharp2D」>shape>「RectangleShape2D」を設定し、Size x:14 y:3にする。また「Node2D」>「Transform」position.y:-10としGoombaの頭上に配置する。もちろんユニーク化しておこう。

RayCast2Dの設定

シーンドックで「RayCast2D」を選択、インスペクター「RayCast2D」TargetPosition x:0 y:15に設定(長さ10)後、右に移動させる。(Transform position.x:6,position.y:0)

最終的には、下記の通り成っていれば、大丈夫

AnimationPlayerの設定

「run,hit」アニメーション作成

左側のシーンドックで「AnimationPlayer」を選択し下欄の「アニメーション」>Newを選択

「アニメーションを新規作成」欄に「run」と入力後、okクリック

左側の「+トラックを追加」をクリックし「Property Track」を選択

「flame」選択

左側のシーンドックで「Sprite2D」を選択し、インスペクターAnimation>Frameの鍵マーク+を2回クリックする。すなわち0−1までの2フレームを追加する。

アニメーションの位置を0フレーム0秒、1フレーム0.4秒に調整。Frame画像をドラックすれば、位置を変更できる。

アニメーションの長さを0.8秒に設定し、「アニメーションループ」をonにする。水色ループ表示

実際に動かして動作を確認してみよう。▷マーク

同様に「アニメーションを新規作成」で「hit」を作成し、flame2に変更し鍵マーク+を1回クリックする。

これで終了だが、アニメーションの動きは各自好みに合わせ設定を変更してください。

グループ名の追加

グループ名として「Goomba」を追加します。

スクリプトのアタッチする

シーンドックで「Goomba」を選択し、「スクリプトをアタッチする」をクリック

継承元:res://Script/Enemy.gd パス:res://Scenes/Goomba.gdを選択し作成をクリック

extend “res://Scripts/Enemy.gd”が自動的に入力されます。それ以外の文面は消去し以下の文面を入力してください。

では、スクリプトの内容を説明します。

super._ready():Enemy.gdのfunc _ready()を継承します。初期アニメーションを”run”に設定

1.if not is_on_floor():床にいない場合は、重力に従い落ちる

2.if direction > 0:方向を1に設定した場合は、「画像反転」sprite_2d.flip_h = false「Raycast反転」双方しない。.if direction > 0:方向を-1に設定した場合は、sprite_2d.flip_h = true「画像反転」-ray_cast_2d_positon_x「Raycast反転」します。

3.if is_on_floor() and not——-、は床の切れ間に来た時そのまま落ちるか、あるいは反転するかの判定です。is_in_floor():床に居る not ray_cast_2d.is_colliding():レイキャストの衝突が無い move_type == 1で方向を反転します。direction *= -1

4.if is_on_wall() and move_type == 0:壁に当たりなおかつmove_type == 0の場合、方向を反転します。

5.if is_on_floor():床にいる場合、設定されたspeedでdirction方向に移動します。

ここからは、Goombaの頭上にPlayerが当たったときの処理です。

1._body.jump_enemy_head():PlayerがGoombaの頭に当たった時、ジャンプするリアクションでPlayer.gdに別途関数を作成します。スピードは通常の1/2

2.collision_layer/maskをfalse 移動停止  アニメーションを”hit”に変更。あとで詳しく説明予定

3.get_tree()—-:1.5秒後Goombaを消去します。

Player.gd追加関数

Level11シーンへGoombaシーンのインスタンスノードを追加

それでは、作成した「Goomba」シーンを「Level11」シーンへインスタンス化して登録する。

まず、左側のファイルシステムドックから「Level11.scens」を選択し、ダブルクリックすると上部のシーンドックに「Level11.scens」が表示される。

「Level11」を選択し、鍵マークをクリックすると今まで作成したシーンが表示されるので「Scenes/Goomba.tscn」を選択し開く。

「Level11」シーンに「Goomba.tscn」がインスタンス化されて、子ノードとして追加された。

上部メニューの「2D」をクリックすると画面が表示されるが、goombaは原点に置かれているので注意(最初の頃はどこにあるかわからなかった(笑))

移動モードを選択し、画像をクリックアンドドロップして適切な場所に配置する。

コメント

タイトルとURLをコピーしました