HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0521
ウェルテeasy3Dのビルボードを使って地面を移動したい5解決


ウェルテ

リンク

2009/5/21(Thu) 02:01:54|NO.25299

質問内容はタイトル通りです。
3Dマップ上をビルボードで表現した2Dキャラクターが奥行き無しの2D移動(上下左右のみ)するものをイメージしています。

自分であれこれ思考錯誤してみて、E3DSetBillboardOnGroundを使用してx,z座標を指定したビルボードをマップに吸着させることはできました。
また、キー入力を感知してx座標を移動させ、マップに吸着したまま左右移動はできるようになりました。

ただ、このままでは段差があった場合に、落ちた瞬間(空中落下を飛ばして)地面にくっついてしまいます。
同じ理由で、後々付加しようと思っているジャンプができません。


そこで、別の方法でビルボードをマップ上で移動させようと考えたのですがどうやって良いかわかりませんでした。
知識・技術をお持ちの方、どなたかお力をお貸しいただけると幸いです。



この記事に返信する


ナマコロケット

リンク

2009/5/21(Thu) 18:17:42|NO.25302

そこまで出来ていれば、後は「前回のループで配置した位置に、
運動量(ベクトル)を加えて現在ループでの位置を取得し、そこに配置する」
と言う考え方が必要になってきますね。
運動量を一定にする事で慣性を表現する事が出来ますし、
そこから少しずつ数字を差し引く事で、摩擦抵抗を表現できます。
空中にいる場合なら少しずつ下がる処理も必要です。
いわいる物理演算への入り口ですが、簡易に定数を設定するだけなら、ぜひやって置くべきでしょうね。
普段プレイしているゲーム(ごくシンプルな2Dアクションでも)それぐらいはやっているって部分です。
今ビルボードをセットしている位置は、
直下方向の地面との当たり判定用数値と割り切って、
それとは別にセットする位置の変数を設定し、そこに各種処理を加えてみましょう。
具体的にはHSPサンプルの中にも「星がジャンプするサンプル」があったと思います。
ウェルテさんが求めているのはそれの事だと思いますので、
それを参考に3D空間内のビルボードを動かして見ましょう。



GENKI

リンク

2009/5/21(Thu) 19:45:39|NO.25303

ただ地面座標に移動しただけ、なのかな?というきがします。
ジャンプ動作は2Dでも同じなのですが、(簡単な)物理の知識がないとジャンプらしい動作を作ることが出来ません。
まず、2Dで練習してみることをお勧めします。

この辺が参考になるかもしれません。
http://hspdev-wiki.net/?%CA%AA%CD%FD%A4%CE%A4%AA%A4%AA%A4%DE%A4%AB%A4%CA%CF%C3



ウェルテ

リンク

2009/5/22(Fri) 01:20:16|NO.25309

>>ナマコロケットさん
ご回答ありがとうございます。
さっそく現在位置を取得する → 移動量を加えて新しい移動位置を作る → ビルボードを移動させる
の流れでスクリプトを組んでみたのですが、床をすり抜けてしまいました。
そこで床との当たり判定は取ることを試したのですが、判定した時点で元の位置に戻すという挙動ではかなり不自然な動きになってしまいました……
不自然に見えず、移動先がマップと衝突するようならマップに吸着させる、という挙動を取るにはどうしたら良いでしょうか?


>>GENKIさん
運動計算にとても参考になりました、ありがとうございます!



ウェルテ

リンク

2009/5/22(Fri) 02:42:28|NO.25312

分かりづらいと感じたので追記です。

E3DSetBillboardOnGroundでマップに吸着させる方法は、同じx、z座標に二つ床があった場合
(地面 + その真上の空中に浮かぶ床など)、強制的に空中の方が優先されてしまうのでやめておきました。

そこでE3DSetBillboardPosを使用してみたところ、上記のような現象(ジャンプ>下降中に、床をすり抜けてしまう)が起こってしまったという意味です。



ウェルテ

リンク

2009/5/22(Fri) 03:16:28|NO.25313

ビルボードのやや下までレイによる判定を取ることで自己解決しました、お騒がせしてしまい申し訳ありません。



ONION software Copyright 1997-2021(c) All rights reserved.