mieki256's diary



2020/11/18(水) [n年前の日記]

#2 [godot] Godot Engineで背景の3Dモデルデータをインポート

Godot Engine 3.2.3 x64 を使って3D表示の簡単なシューティングゲームっぽいものを作る。

今回は、背景についてもモデルデータを差し替えてみる。

モデルデータをエクスポート。 :

blender で背景モデルを作成して glTF 2.0 でエクスポート。モデルデータは以下。CC0 / Public Domain ってことで。

_bg_type_c_20201109.zip (スクリーンショット内で使ってた版)
_bg_type_c_take3_20201111.zip (再作成版。大きさや構成を変更してある)

アニメーションを含んでないモデルデータなので、glTF 2.0 でエクスポートすれば問題は起きにくいはず。

Godot Engine にインポートして開いてみる。表示された。bg_type_c.tscn というファイル名でシーンとして保存。

3d_tuto16_import_bgmodel_ss01.jpg

Bgシーンに読み込んでみる。 :

Bgシーン、res://assets/Bg.tscn を開いて、インスタンスを追加。bg_type_c.tscn を開く。今まで使っていた仮モデルは非表示にするか削除する。

BgModel の下に配置して、右クリック → 複製で数を増やして、比較的広大な(?)シーンにした。

3d_tuto16_import_bgmodel_ss02.jpg


Mainシーンを開いてみる。反映されている。

3d_tuto16_import_bgmodel_ss03.jpg

Bgシーンの動かし方を変えてみる。 :

Bgシーンは BgModel を動かすことで背景がスクロール(?)しているように見せかけているけれど、z軸方向に動いてるだけで面白みがないような気がしてきた。x軸方向にもずらしたり、z軸で回転させたりして、動きに色気(?)をつけてみる。

res://scripts/Bg.gd を修正。内容は以下。

_Bg.gd
extends Spatial

export var scroll_speed = 120
export var limit_z = 80
export var add_z = -80

export var angle_add = 20
export var x_shift_range = 80
export var rotz_range = 10
var angle = 0

func _ready():
    pass # Replace with function body.

func _process(delta):
    angle += (angle_add * delta)
    if angle > 360.0:
        angle -= 360.0
        
    var rz = rotz_range * sin(deg2rad(sin(deg2rad(-angle))))
    $BgModel.rotation.z = rz
    $BgModel.translation.x = x_shift_range * sin(deg2rad(angle))
    
    $BgModel.translation.z += scroll_speed * delta
    if $BgModel.translation.z >= limit_z:
        $BgModel.translation.z += add_z

敵が弾を撃つ処理も修正。 :

ついでに、敵が弾を撃つ際の処理も若干修正。res://scripts/EnemyZako.gd を修正。

_EnemyZako.gd
# ...
            
func _on_ShotTimer_timeout():
    var angle_add = 12
    var angle = 90 - angle_add * 3
    var spd = 0.2
    for i in range(7):
        _shot(translation, angle, spd)
        if hp <= hpmax * 0.7:
            _shot(translation, angle, spd * 0.8)
        if hp <= hpmax * 0.3:
            _shot(translation, angle, spd * 1.2)
            _shot(translation, angle, spd * 1.1)
            _shot(translation, angle, spd * 0.9)
        angle += angle_add
    
# ...

  • 敵のHPに応じて、発射する弾の数を変えている。

動作確認。 :

Mainシーンを開いてF6キーを押して動作確認。



それらしい画面になってきた。

次回はサウンドを追加してみる。

以上です。

過去ログ表示

Prev - 2020/11 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project