開発報告(5/11)

おひさしぶりです。相変わらずちまちまと開発しているので、進捗報告をばをば。 先月からの大きな進捗は概ね以下のような感じです。

「みんなでつくるダンジョン」の進捗報告

ほかのマップへ移動できるようになった

ほかのマップに移動できるようになって、ようやくやりたいことの骨組みができ始めてきたぞー、という気持ち。 こんなかんじにマップに「コネクタ(仮称)」とよばれるブロックを置き、接続先のコネクタを選んであげるとマップ間移動ができるようになります。

f:id:piyorinpa:20180511005335p:plain
コネクタの配置と接続先の設定

まだまだ作り立てほやほやなこともあり、UIは微妙な感じですが、これからもうちょっとカッコ良くしていきたいなと思っています。

いまは自分のつくったマップのみ接続先として設定できるようになっていますが、これから他の人が作ったマップとも接続できるようにしていきます。

あたり判定を改善した

あたり判定を改善して、アバターの位置補正処理(壁や床に当たったときに止めたりする処理)がよくなりました。

いままでは、以下のように接触部分をバネ・ダンパーモデルっぽくしてあげて、マップに拘束された(動かない)物体にめり込まないように アバターの跳ね返り処理を行っていました。めり込み量とばね定数からなるばねの反発力を使って、アバターなどの「固定されていないオブジェクト」の 位置を補正します。

f:id:piyorinpa:20180510234621p:plain
ばねとダンパーで位置修正の図

こうすることで、複数の物体が重なったり押し込まれたりした場合についても、ばねの反発力が作用しあうことで位置補正が自然と行われることが期待できるため、このようにしています。

f:id:piyorinpa:20180510235734p:plain
複数物体が重なったり押し込まれたり

しかしながら、めり込み量が大きいとアバターが跳ねてしまうほか、ばね定数が小さいとめり込みから復帰しなかったりとなかなか調整が難しいなぁという感じでした。 そこで、新たに「拘束条件を求める処理」を追加して、壁に接触している場合のめり込み方向の速度を補正してあげる処理を追加しました。こうすることで、めり込みすぎを防止したりできるので、 ばね定数の調整などもしやすくなると考えました。

f:id:piyorinpa:20180511003157p:plain
拘束条件を求めてめり込み方向の速度をキャンセル

こんな感じに接触ツリーをあたり判定時に構築し、壁や天井などの「マップに拘束されている」部分からツリーを辿り、接触面の法線ベクトルと力の向きから修正すべき速度の方向や大きさを決定します。

これである程度はマシになったので、しばらく様子見をしてみようかなーという感じです。

ロゴを試しに描いてみた

やっぱり見た目がある程度ちゃんとしていないと開発のモチベーションが維持できないなという気持ちになったので、(サービス名も決まっていないのにというツッコミはありつつ)とりあえずロゴでも書いてみました。

f:id:piyorinpa:20180510232317p:plain
描いてみたロゴ

いろいろなマップを組み合わせてつくられた空間を動き回るというイメージです。(そのまんまじゃないか)

ロゴ、以下の理由から描くの難しいなーって思います。個人開発なのでよいじゃないかといえばそうなのですが、やっぱりもうすこしこの辺のスキルも欲しいなと思うのでした。

  • ぱっとみてわかる図にしなければならないこと
  • ある程度大きさの変更に耐えうること(特に小さくしたときでも見づらくならないこと)
  • (デザインにもよるけど)シンプルなほうが良い場合が多いこと

ロゴは「Inkscape」というベクトル画像をつくれるソフトウェアで描いたのですが、このソフトを使っている人をあまり周りで見ないなぁという気持ちになったので、いつか使い方記事でも書いてみようかな。

雑記

進捗報告だけのブログだと、どうしてもネタがあれでなかなか筆が重くなってしまうので、もうちょっとどうでもいいことを書いてもいいかなと思い始めています。 というのも、こうして進捗報告記事を書くときに「あれ、なに実装したっけ?」となりがちなので。。。

継続はなんとやら、ということで、文章書くのに慣れて(というか面倒くさがりな部分を直して)もうちょっとこまめに開発報告できるといいなぁ。

ではでは。