見出し画像

ダンジョンでお花摘みさせて!!"オートウォーク機能" #13

こんにちは。やーぺです。

 こちらは「ダンジョンでお花摘みなんか許しません!!」の二次創作、「ダンジョンでお花摘みさせて!」のスコアアタックゲーム開発記録です。(フリーウェア公開予定)

原作はこちら

体験版も公開中です。(Booth以外のアップロード先も検討中)

前回はステージ全体の見直しをしました。

そろそろギミックの開発へ本格シフトします。そして随時、ステージを作っていきます。

今回作成したギミックはオートウォーク機能です。体験版をプレイしていただけたらわかると思うのですが、敵が初期状態で歩行していないんですよね。

ステージを作ってて「なんか地味だな・・・」ってなったのでオートウォーク機能を作りました。

まず体験版での敵の動作の仕組みは以下のようになってます

1、待機
2、プレイヤー発見時に追跡
3、攻撃を受けたら消える

ここで「1、待機」を以下のように変更します。

1、指定されたポイントへ移動
2、プレイヤー発見時に追跡
3、攻撃を受けたら消える

仕組みは非常に簡単ですね。


・・・ただ敵のソースコードがかなり雑に作られていて、読み解くのにかなり苦労しました。誰だこんなクソコード書いたやつは。コメントないやんけ。

今回、変更したところはここです。

#経路更新のタイミングで呼ばれるメソッド
func _on_NavTimer_timeout():
	
	#指定の確率で適当な位置を目的地にする
	rng.randomize()
	if ( rng.randi() % 100 + 1) > random_walk_per :
		self.target_path = 
            nav_2d.get_simple_path( 
                position , 
                target.position , 
                false 
            )
	else:
		self.target_path = 
            nav_2d.get_simple_path( 
                position , 
                Vector2( rng.randi(), rng.randi() ) , 
                false 
            )

こちらのコードはNavTimerというタイマーが0になるたびに呼ばれるメソッド(関数)なのですが、ここで分岐を使います。

func _on_NavTimer_timeout():
	
	#プレイヤーを見つけている
	if detection_flag :
    	#指定の確率で適当な位置を目的地にする
    	rng.randomize()
    	if ( rng.randi() % 100 + 1) > random_walk_per :
    		self.target_path = 
                nav_2d.get_simple_path( 
                    position , 
                    target.position , 
                    false 
                )
    	else:
    		self.target_path = 
                nav_2d.get_simple_path( 
                    position , 
                    Vector2( rng.randi(), rng.randi() ) , 
                    false 
                )
    else:
		
		#見つけていない時はpathに指定された道を代入する
		if self.target_path.size() == 0 :
			var current_position = self.global_position
			for path in auto_path :
				self.target_path += 
                    nav_2d.get_simple_path( 
                        current_position , 
                        path , 
                        false 
                    )
				current_position = path
		pass

まずプレイヤーを見つけているかを確認。見つけていればプレイヤーを追跡、そうでなければ指定されたポイント(パス)へ移動する。

こういう分岐を入れる。そうすると以下のように動きます。

右下の敵が自動で歩行しました!

・・・動作上は問題ないのですが、中身があんまりきれいじゃないのでそのうち作り直したいですね。


というのが今週の進捗です。
私事なのですが最近忙しくなってきてしまい、なかなか開発に打ち込めないのがとても残念です。外出時もノートにアイディアとかいろいろ書き込んでるから早く作りたくてしょうがないんですよね・・・。

もうちょっと時間をうまく作れるように努力したいですね!

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