振り返り
前回の僕は、mobにidを割り振りました。また、独自システムであるsecare(攻撃で攻撃を受け流す一種のパリィ)の基礎を完成(させたと勘違い)。アニメーション演出をmobに追加するために、結局システムを作り替えなければいけなくなりました。
アニメーションへの対応
ということで、作り変えることになりました。
作り替えると言っても、根本が変わるわけではないのでサクサクと作業が進みました。
animatedjava で作ったアニメーションのentityにもentityid を与えてハスクと結びつける。
(ついでに当たり判定用のinteractionをこのanimatedjavaで作ったモデルにrideさせた。)
ハスクを透明にして、異形のmobの完成。
(これは現在の状況なので、この作り替えた時と中身は全く違います。)
これであとはガンガンmobを追加していくだけだ!
MOBの動きは制御できない。
やっとうまく行った。
そう思ったのも束の間、次の問題にぶち当たりました。
ハスクの動きとアニメーションを一致させられない。
ハスクは常に歩いているわけではありません。
しかし、なぜかこのneotaiyouという人間はそのことをすっかり忘れていました。それにより透明なハスクが歩くのをやめた時にはまるで、ランニングマシンに載っているように見えることとなってしまいました。
このマインクラフトというゲームエンジンにデフォルトで搭載されたmob たちの動きは意外と複雑になっており、そう簡単にアニメーションと動きを一致させられませんでした。
こういう時の対処法はただ一つ。
コマンド勢の恋人、防具立てを使いましょう。
ハスクを防具立てに置き換えて、歩行をtpコマンドで追加しました。
また、こちらの攻撃が防具立てに当たってしまうのを防ぐためにマーカータグをつけました。
襲いかかるいくつもの問題とたった一つの動画による救い。
tpコマンドで歩くようになったmob。
しかしtpコマンドを使用していると壁を貫通して歩いてしまいます。
execute unless block ^^^1 air
で初めは対処しました。しかし、足元1ブロックしていれば突進したり、壁にぶつかったら動きようがなくなったり。
どうしたものか…
そう思いながら、作ったmobと戦っていると、あることに気づきました。
「これ、連打できるくね?」
Mobの当たり判定は、interactionで行う。
これの弊害でした。 interactionへ攻撃することはチャージなど全く関係ありません。連打していれば簡単にSecare(攻撃で攻撃を弾く)ができてしまう。しかもノックバックしないのでいくらでも殴れる。
連打していれば、すぐにmobを倒せる。
つまり、
1。mobの動き(歩く、ノックバック)
2。プレイヤーの攻撃
ここにきてこの二つの問題がでてきたわけです。
私にはどうしたらいいかわかりませんでした。
…ここで私は昔に見たコマンドの動画を突然思い出しました。
「確か、まっしゅさんが、戦闘システムを自作してた…」
(まっしゅ さんは、データパックの解説をしている方です。いつも参考にしています。)
再び視聴…
まっしゅさんの戦闘システムでは、プレイヤーにパンダを被せて攻撃したことを検知、dx等のセレクターを組み合わせることでmobへのヒット関係の処理を行う。(interactionでも問題なく使えた。)
と言ったことをしていました。また、interactionが追加されてからはパンダがそれに置き換わっていました。
僕は見よう見まねで、プレイヤーの攻撃のシステムを作り替えました。
これに合わせてsecare の当たり判定やスキル使用時の召喚方法など、目に見えない部分を色々作り直しました。
(ついでにプレイヤーにもアニメーションをくっつけました。だからみんなのスキンは僕の配布マップでは今の所つかえなくなる、マルチはできない予定だよ。)
これによってまず2番の問題は解決しました。
そして、mobのノックバックのシステム。
詳しくは まっしゅ マイクラ と検索して、動画を見ていただきたいのですが、簡単に言ってしまうとmotionタグをプレイヤーの向いている方向に飛ぶようにエンティティに付与する。
という仕組みでした。また見よう見まねでコマンドを組みました。
もちろん、マルパクリしたわけではありません。(アニメーションとかのエンティティの関係でできない。)
マーカーentityはモーションタグをつけられないということを知らなかった僕は少し苦労しましたが、最終的になんとか1番のノックバックの問題も解決しました。
ここで僕は思いつきました。(誰でも思いつくことを思いついた。)
プレイヤーの視線を基準にしたらノックバックする。なら、mobの視線を基準にするように組み換えて、速度を調整すれば、mobが前に歩き壁も貫通しない、たとえ壁につかかっても少しずつずれていくようにできるのではないだろうか?
これはスムーズに行き、問題は全て解決しました。
(これによってまた新たな問題が発生することは次回以降に。)
LVの追加。 hpの自作。
一度mobの話からは離れます。
まるで地下のようなくらい部屋でコマンドを組む黄色いクソやろうに とって、やはりLOVEは大事。
LOVEが欲しいので、仲良しカプセルをいっぱい拾おう!
とバカなことを言っていても、この界隈ではコマンドを組むか組まないかでしかないので、配布マップのLVを上げるために、真面目に考えます。
方法1 Lvごとにステータスを決める。
これは簡単でLV0ならhp20。LV1ならhp22と手動で決めておく方法です。
しかし、LVの上限が生まれてしまいますし、面倒。
方法2 LVで計算する。
例えば、hp20+LV*2のようにして、Lvからステータスを出す方法です。
LVが上がるほど上がりづらくするなど計算式さえ作ればあとは簡単です。
しかし、バランス調整が非常に面倒くさい。
レベルアップに必要なexpがバカみたいに多くなって行く。などの問題があります。
方法3 Pルート作戦
プレイヤーが一度もLOVEを手に入れないようにする。
LVなしなのはRPGらしくないので却下。
とりあえず、方法2を採用しある程度できてきたら調整することにしました。
(今はlvアップに必要なexpが借金のように膨れ上がってしまうようになっている。Lv1は120expなのに、999999exp 足してもLV21…)
まあとりあえず、計算してステータスを出せるようになりました。
次は、またmobの話と、ストーリー関係の話をしたいと思います。
(現状はここまで。今抱えてるmobの問題が解決できたら続きあげます。)
コメント