絵の無いゲーム 2019/07/17 21:00

今日の進捗 ~NPCの視界制御、完成~

NPCの視界の設定になんとか成功しました。
以下開発メモです。


プレイヤーが視界内にいるかの判定

まずNPCとプレイヤーの距離を算出。
それぞれの座標を取得して、プレイヤー座標とNPC座標の差を求める。
その値の絶対値が距離である。


      設定した視界            得られた視界を色分け。

次に視界の設定。
距離の値がX,Y座標で(2、4)の場合、視界は2×4の長方形の形を取る。

その形を基準に、条件分岐で視界の形を整えていく。
また、NPCの向きとプレイヤーの位置などで条件を変更。
残りの方向に対しても同様の処理をする。

ここまでの処理をプレイヤーを認識するまで繰り返し、プレイヤーを認識したら、以降の処理で壁があるかを判定する。

壁の認識


赤丸で囲んだ地形を壁と認識させる。

まず「データベース」→「タイルセット」セットから、壁(=視界を切らせたい障害物)にしたいタイルの、「地形タグ」を1以上に変更する。


精度を高めるために座標を入れなおして、壁認識用の座標を取得。
座標の入れなおしは省いてもいいかもしれません。

Y軸上方向(マイナス方向)の壁を認識するために、先ほど取得した壁認識用のY座標を上に飛ばす(Y座標をマイナス1する)

目の前に視界ビームを飛ばしてるイメージ?

視界ビームを飛ばした先にプレイヤーがいる、すなわち壁認識用の座標とプレイヤーの座標が等しい場合は、プレイヤーを発見した処理へ。

プレイヤーがいない場合、目の前の地形タグを取得する。
地形タグが0(=障害物がない)場合は更にマイナス1して、もう一マス前に視界ビームを飛ばす。

地形タグが、先ほど設定した1以上のタイルだった場合、壁を認識。
視界ビームを飛ばすマスを垂直にずらして、同様の処理を繰り返す。
画像の場合だと、左一マスずらす処理へ進む。

座標を左に一マスずらす(=X座標をマイナス1)した後で、また視界ビームを飛ばす。

プレイヤーを発見したら発見の処理へ。
壁を認識したら今度は右にずらす。
壁がなかったら更に視界ビームを飛ばす……

これを上下左右全ての方向に対して行う。

つまり「自分の縦横三マス分全てに視界ビームを飛ばす」ことになる。(プレイヤーが壁の奥側にいる場合)

そうして最後の視界ビームと飛ばし終えたら、視界内にプレイヤーないないということで、距離を算出するところから繰り返す。

この際、視界ビームを飛ばす回数やずらす範囲で、さらに視界を細かく設定できます。



今回だと、視界ビームは四マス先まで飛ばして三マス広がるように設定。
視界は画像の色分けした通りになります。


視界と壁認識、実装動画

画像だけだと分かり難いので、実装したところを動画に。
今の所不具合なく動いてます。

今後の課題としては、
・二体以上に視界を持たせる場合、管理が非常にめんどくさい。
・上下左右方向に対応させるので視界の設定が複雑。時間がめっちゃかかる。

これらの点を改良していきたいです。

参考動画

本システムを作成するにあたり、ニコニコ動画でよあひむさんが公開している動画「【RPGツクールVX Ace】RPGツクールでつくーるよ 14【ゆっくり実況】」を参考にさせていただきました。

視界の説明に関してはここの説明より100倍分かりやすいです。

以下ニコニコ動画のリンク
https://www.nicovideo.jp/watch/sm20461074

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索