K3の住民

最近はレア社のゲームについては書いていませんが、一応レア社のゲームが一番好きな人です。『雪圀』で"圀"は"国"とほぼ同義ですが、国ではありませんって当たり前か(笑)。

【ムジュラ3D】「Weird Rise」の原因、完全解明

2017年6月28日、浮遊する原因も判明し、この技についてひとまとめにしました↓
http://ryoryoau24.hatenablog.com/entry/2017/06/28/201633


2017/04/22 訂正。

皆さん、本当に久々です。雪圀です。
忙しかったわけじゃないです。普通に更新サボってました。いや、やる気出なかった
というか、正直ネタはあるけどどのネタもモチベーションが無いとやってられん
ぐらい時間かかる奴だったんですよ・・・。

というわけで、今回はリンクが一定の場所で空中浮遊をするバグ「Weird Rise」に
ついて、原因が解明したのでお話しします。

こんなバグです↓
http://ryoryoau24.hatenablog.com/entry/2015/05/18/230233
http://ryoryoau24.hatenablog.com/entry/2016/05/15/205526
http://ryoryoau24.hatenablog.com/entry/2016/11/12/195915


先ずこの「Weird Rise」の原因を理解する為には、「当たり判定処理の大変さ」を
理解しておく必要があります。

先ず当たり判定の処理は基本的に「オブジェクトが別のオブジェクトのx,y,z軸の
ある範囲を超えたら処理される」と言う感じになっています。
どういうことかを簡潔に説明するために、画像で解説します。

簡単に理解していただく為に、三次元軸では無く二次元軸で解説します。
個々のオブジェクトは、生成された時点でx軸、y軸を持っています。例えば、
「オブジェクト1」と「オブジェクト2」が生成されたとして、図1のように軸が
存在するのです(当然ながらゲームをするときはこの軸は見えません)。

f:id:ryoryoau24:20170416114028p:plain
       図1 オブジェクトの軸

ここで、オブジェクト1、オブジェクト2の軸の中心は、オブジェクト1、
オブジェクト2の中心であるとします(何故こういったのかと言うと、軸の中心
がオブジェクトの一番左上であったり、中心であったりするからです)。

ここで、ようやく当たり判定の設定の仕方について説明します。当たり判定を
設定するには、オブジェクトの軸を指定する必要があります。例えば、
オブジェクト1の右側からオブジェクト2の左側に当たりに行く場合、図2のように
個別に軸を赤点に指定する必要があります。

f:id:ryoryoau24:20170416114053p:plain
     図2 各オブジェクトの軸の指定

こうすることで、「オブジェクト1のx軸の最大値の点がオブジェクト2のx軸の最小値
の点を超えると、処理が行われる」と言う設定が出来るようになります。

しかし、これだけだと、例えオブジェクト1がオブジェクト2のy軸の最大値よりも遥か
上に、または最小値よりも遥か下にあったとしても、指定されたx軸を超える『だけ』
で処理されてしまい、「その指定されたx軸以上は動けない」と処理したならば、
ゲーム的には「見えない壁」というものが出来てしまいます。
そこで、オブジェクト2側には、x軸の最小値の点を指定するだけで無く、y軸の最大値
から最小値までの範囲を指定することで、ようやくちゃんとした当たり判定が作れる
のです。

この時点で「大変だ」と思った人もいるかもしれませんが、ここから更に上側、
下側、右側にも当たり判定を作る場合はもっと大変です。更に言えば、角に
当たった場合の処理は上下左右に当たり判定を作るだけでは処理が不安定になる
ので、そこもちゃんと考慮する必要があります。

ということで、以上で「当たり判定の処理の大変さ」が分かったと思います。
ここで、「Weird Rise」の解説に戻りましょう。


察しが良い人なら分かったと思いますが、この「Weird Rise」はある傾きを持っている
テクスチャからそれとは別の傾きを持っているテクスチャの間かつそこが崖である
場合に発生します。つまり、原因は単純に「当たり判定の設定ミス」ですね。
「何故出来ない場所が存在する」のかも、この「当たり判定の設定ミス」と言う理由
で片付けることが出来ますし、それでどういったところでこの「Weird Rise」が出来る
のかも、ある程度は推測出来るようになります。
起こった場合の挙動についてですが、それは前回の「Weird Rise」の記事にて登場した
派生技「Extended Weird Rise(以降「EWR」)」であらかた説明しています。
・・・が、稀にその「EWR」の挙動から外れたような挙動を起こす場所もあります。
ぶっちゃけこれに関してはガチで分かんないです。当たり判定が重なった場合の
誤動作であることは確かですが、半永久的に「EWR」が起こったりする場所も
あったり、何故か「Weird Rise」だけが出来る場所もあったりと、例外もあります。
この例外は前回の記事でも紹介しましたが、前回から色々検証したところ、その
例外の解説が矛盾する場所でも例外のような挙動を起こす場所を発見してしまった
ので、「EWR」の最初の説明以外は無かったことにしてください。ついでに
前々回の処理の誤動作についてですが、あれの「重複処理によって起こった
誤動作が挙動の原因」と言うのも違うと思いますのであれも無かったことに
してください(まぁこれについては考察なので、無かったことにしなくても良い
ですけど)。
このように原因は解明しましたが、挙動に関しては解明出来たとは言い難い状況
です。



以上です。約2年ぐらい研究してきましたが、原因が分かって良かったと思って
います。というか、本当に誰も研究しなかったな。まぁ、このブログ自体見てる
人が少ないっていうのもありますけど。

課題は挙動についてですかね。今後は挙動について研究していきたいと思って
います。

今回はこれくらいにしときます。