無双のようなキャラ移動を実装したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Dim!
記事: 6
登録日時: 14年前

無双のようなキャラ移動を実装したい

#1

投稿記事 by Dim! » 13年前

無双のようなキャラ移動を実装したいのですが、良い案が思い浮かびません。

文章ではうまく説明できないキャラ移動なのですが、
左スティックを上下に倒すと、キャラが前後に移動するのは一般的なキャラ移動と同じです。
問題は左右移動と斜め移動です。
例えば右に移動すると、一見すると右に動いてるように見えるのですが、やがて元の位置に戻ってきます。
要するに、左右移動のときはフィールドを円形を描くように移動しているのです。
もっと厄介なのが斜め入力の時で、前後移動と左右移動を補完するように円形移動します。

うまい説明が出来ずに申し訳ありません。
伴ってカメラワークも無双のものを参考に使いたいと考えています。
創作環境はC#のXNA 3.1です。
このキャラ移動を実装するべく、そのための考え方をどうかご教授願います。

【追記】No.5の添付ファイルにて、キャラ移動の概念を独自に調べた図を載せました。
参考にしたゲームは、「戦国無双3」「真・三國無双6」「ガンダム無双3」です。
最後に編集したユーザー Dim! on 2011年11月22日(火) 00:49 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 無双のようなキャラ移動を実装したい

#2

投稿記事 by softya(ソフト屋) » 13年前

無双に詳しくないですが調べてみて欲しい事があります。
それは何を中心に円運動しているかです。
推測1.カメラ視点の先の一定距離に円運動の中心がある。
推測2.自キャラの正面の先に円運動の中心がある。円運動の中心は左右移動前に向いていた方向で決まる?
それ以外の可能性もあります。

検証動画もあるとベストです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ふりかけ

Re: 無双のようなキャラ移動を実装したい

#3

投稿記事 by ふりかけ » 13年前

難しく考えてるだけではないでしょうか。

スティックを右に倒せばキャラクターは画面に対して右に動く
その時、カメラの向きも少し右を向く
もう一度画面に対して右に動こうとすると、さっきとは少し進行方向が変わってますよね?カメラの分だけ
(フィールドに対してではなく、画面に対して動くから)

スティックが右に倒されている間それが続くので結果的に円運動になると思います。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: 無双のようなキャラ移動を実装したい

#4

投稿記事 by ISLe » 13年前

いわゆるロックオンですね。

ロックオンしているときは、
左右移動は、ロックオン対象を中心とした回転
前後移動は、ロックオン対象との距離(半径)の増減
です。

あとはどこをロックオンの中心とするかだけです。

近付いた分だけロックオン対象が離れるようにすれば、質問に書かれたような前後移動になります。

Dim!
記事: 6
登録日時: 14年前

Re: 無双のようなキャラ移動を実装したい

#5

投稿記事 by Dim! » 13年前

お三方、ご教授ありがとうございます!
softya(ソフト屋) さんが書きました:無双に詳しくないですが調べてみて欲しい事があります。
それは何を中心に円運動しているかです。
推測1.カメラ視点の先の一定距離に円運動の中心がある。
推測2.自キャラの正面の先に円運動の中心がある。円運動の中心は左右移動前に向いていた方向で決まる?
それ以外の可能性もあります。

検証動画もあるとベストです。
真横に移動するときは、プレイヤー・カメラ・中心点がその順番で一直線上に並ぶような位置にあります。
斜め移動、例えば右斜め前に進む時は、初期位置より右斜め後ろに中心点があるように思えます。
真横に移動するときの円の大きさが最小で、ほぼ直進に近い斜め前への移動(もしくは後退)が、大きさが最大の円形を描く傾向です。
自己流で調べてみた移動の概念を添付画像の図にしたので、良ければ見てくださいm(_ _)m
カメラの位置は、横移動時に描く円形(添付した図でいうところの青い円)の中心点かどうかはわからないので、憶測で置いています。
ふりかけ さんが書きました:難しく考えてるだけではないでしょうか。

スティックを右に倒せばキャラクターは画面に対して右に動く
その時、カメラの向きも少し右を向く
もう一度画面に対して右に動こうとすると、さっきとは少し進行方向が変わってますよね?カメラの分だけ
(フィールドに対してではなく、画面に対して動くから)

スティックが右に倒されている間それが続くので結果的に円運動になると思います。
なるほど、斜めの移動は前後方向への移動も組み合わせれば、それも実現できそうですね。
確かに「簡単な処理なのに難しく考えすぎなのだろう」とは幾度も考えましたが、それがわかっていても全く思い浮かばないものです……。
今回の制作でXNAは初めてなので、カメラ視線からみたプレイヤーの移動処理など、変換行列の扱い方に慣れていないので、
今すぐにチャッチャと!なんてふうには試せないのですが、調べながらやってみようと思います!
ISLe さんが書きました:いわゆるロックオンですね。

ロックオンしているときは、
左右移動は、ロックオン対象を中心とした回転
前後移動は、ロックオン対象との距離(半径)の増減
です。

あとはどこをロックオンの中心とするかだけです。

近付いた分だけロックオン対象が離れるようにすれば、質問に書かれたような前後移動になります。
ロックオンする対象物はないキャラ移動なので、今回私が実装したいものとは少し違うような気がします。
ですが、ロックオンのような機能は別のところで実装する予定なので、そちらを実装する際に参考にさせていただきます!
添付ファイル
無双移動.png
無双移動.png (12.16 KiB) 閲覧数: 4287 回

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: 無双のようなキャラ移動を実装したい

#6

投稿記事 by ISLe » 13年前

添付画像を見ると、キャラ移動と視線移動が重なっているような動きをしてますね。
古い三国無双しかプレイしてないですが、キャラ移動は左スティック、視線移動は右スティックと別々に割り当てられていた記憶がありますけど。

Dim!
記事: 6
登録日時: 14年前

Re: 無双のようなキャラ移動を実装したい

#7

投稿記事 by Dim! » 13年前

ISLe さんが書きました:添付画像を見ると、キャラ移動と視線移動が重なっているような動きをしてますね。
古い三国無双しかプレイしてないですが、キャラ移動は左スティック、視線移動は右スティックと別々に割り当てられていた記憶がありますけど。
そういえば右スティックの視点移動については言及していませんでした。申し訳ありません。

左スティックによる横移動時はカメラを中心点として、もしくはカメラとプレイヤーの描く円形が同じなるような中心点を軸に、(カメラと)プレイヤーが移動しています。
(単純にカメラを中心点としてプレイヤーが移動すると考えたほうがいいかもしれません)
右スティックによる横視点移動時は、プレイヤーを中心としてカメラが移動しています。

また、例えば三國無双3とガンダム無双では、左スティックと右スティックを両方共に右へ倒すと、まるで加速したかのように移動しているように見えます。
真・戦国無双6は右スティックによるカメラの移動が逆なため、左スティックを右に、右スティックを左に倒すと同様の効果が見れます。
(もしかしたら逆に記憶しているかもしれません……)
なので、添付画像とは違う結果が得られると思われます(こちらはまだ画像化出来るほど詳しく調べていません)。

添付画像のものは、キャラ移動にたいしてカメラを自然に追従させた(右スティックを倒さない)時に得られた結果です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 無双のようなキャラ移動を実装したい

#8

投稿記事 by softya(ソフト屋) » 13年前

この図を見ると横移動ではカメラを中心に円運動しているように見えますが実際そうなのでしょうか?
斜め移動は横移動と縦移動のベクトルを合成しているような印象を受けました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Dim!
記事: 6
登録日時: 14年前

Re: 無双のようなキャラ移動を実装したい

#9

投稿記事 by Dim! » 13年前

softya(ソフト屋) さんが書きました:この図を見ると横移動ではカメラを中心に円運動しているように見えますが実際そうなのでしょうか?
斜め移動は横移動と縦移動のベクトルを合成しているような印象を受けました。
カメラが円運動の中心にあるかどうかは、実際の無双ゲームをプレイしてみても確定できませんでした。
少なくとも、プレイヤーとカメラと中心点が一直線上にあることは間違いと思います。
カメラを中心に円運動していると考えた方が単純なので、実装の際はカメラが中心にあるとして考えようと思っています。

斜め移動については、その通りだと思います。
思っていたよりも簡単な処理で実装できそうですね。

Dim!
記事: 6
登録日時: 14年前

Re: 無双のようなキャラ移動を実装したい

#10

投稿記事 by Dim! » 13年前

みなさん、十分すぎるほどのアドバイスありがとうございました!
これを参考に実装してみようと思います。
実装に成功したら改めて報告に来ます!

もし、他にも何かありましたらよろしくお願いしますm(_ _)m

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: 無双のようなキャラ移動を実装したい

#11

投稿記事 by ISLe » 13年前

カメラをロックオンしてるのと同じですかね。

ロックオン対象が背後だと処理上は前後左右の方向が逆になりますけど。

閉鎖

“C言語何でも質問掲示板” へ戻る