EasyFAQ/5

Last-modified: 2007-12-29 (土) 20:44:44

3D格闘ゲーム用、1Pと2Pとカメラ位置の関係性の作り方

投稿者F1大好き
重要度
状態
カテゴリ
HSPバージョン3.1b3
E3Dバージョンver3.0.3.5
回答

ここから下を自由に編集してください。
上の投稿情報は安易に編集するとFAQリストのリストアップに支障が出るものもあります。
よく分からない方は分かる人に聞いてみてください。

  • バーチャや鉄拳のような3D格闘ゲームでの、1Pと2P、カメラの位置の関係性を作り出すのに参考となる本など、ご存知ありませんか?E3Dwikiに提供されてある、「きのうのひと氏」製作の「prismic stars」のようなカメラの位置制御とキャラクタの位置関係を実現したいのですが…。 -- F1大好き? 2007-12-28 (金) 21:01:41
  • 12月に出たE3Dムック本では、今までと同じようにE3DCrossでカメラの位置を決めてあるので、カメラから見た1Pと2Pの立ち位置が入れ替わるようにできません。 -- F1大好き? 2007-12-28 (金) 21:03:06
  • 1Pと2Pの立ち位置が入れ替わるということでしたら、E3DVec2CCWをつかったら入れ替わったときresultに1か-1の値が入ると思うので(確信なしorz)、そのときE3DCrossのベクトルをマイナスにしたらどうでしょうか -- 26℃? 2007-12-28 (金) 21:38:10
  • ありがとうございます。E3DVec2CCWを使って、どのベクトル同士を比較しあえばいいのでしょうか? -- F1大好き? 2007-12-29 (土) 00:46:06
  • 最初の質問の仕方が不十分な気がしました。 -- F1大好き? 2007-12-29 (土) 00:47:21
  • えーと、ムック本のE3DCrossを用いる方法では、最初に1Pが左、1Pが右となっていると、たとえ1Pが2Pの背中側へ行ったとしても、画面上の見た目では1Pと2Pの左右の場所は入れ替わる事がなく、常に1Pは左で2Pは右となりますよね。これを解消して、1Pが2Pを飛び越えて左右の場所が入れ替わったりするようにカメラを制御しようとしております。・・・が、ぐわんぐわん動いて1Pは左、2Pは右と固定されます(´・ω・`)。カメラ座標から1Pと2Pの居る座標方向を常に把握するような事をするのでしょうか? -- F1大好き? 2007-12-29 (土) 00:54:52
  • ↑の一行目ミスりました  ※1Pが右となっていると <[訂正] 2Pが右となっていると   -- F1大好き? 2007-12-29 (土) 00:56:29
  • カメラの向きフラグ(初期値=1)と外積保存用の変数を用意します。E3DCrossで今回の外積を求めたら保存してある前回の外積との内積を求め、これがマイナス値のとき向きフラグに-1をかけて反転させます。カメラ向きには外積に向きフラグをかけた値を使い、保存用変数には向きフラグをかけない外積を保存します。 -- きのうのひと? 2007-12-29 (土) 01:10:37
  • うーん、わかりにくくて申し訳ない。とりあえずうちではこうなっています。「回り込み」動作をするとカメラがついてきてしまうのが困りもの。ちなみにE3DVec2CCWは「画面上でキャラが右向きか左向きか」の判断に使えます。 -- きのうのひと? 2007-12-29 (土) 01:19:09
  • 本に書いている格闘ゲームの操作方とprismic starsの操作方は根本的にちがいますので考え方も違ってきます、F1大好きさんはどういうキー操作を想定していますか? -- 26℃? 2007-12-29 (土) 01:33:36
  • 寝てたら、ふと考えが巡って飛び起きてみたら沢山のアドバイスが…。皆さん、ありがとうございます。きのうのひとさん、物凄く参考になります。26℃さん、そうですよね、すみません。操作系はまさにバーチャファイターで、←→でキャラが前後に移動、↑で奥へ移動、↓で手前に移動、ボタンでガード、小攻撃、大攻撃です。スト2のような明確なジャンプはありませんが、ピョンとジャンプする技や、特攻技系で相手を叩き伏せて乗り越える場合があります。操作系はほとんど出来まして、画面上のキャラを動かしてた時に、キャラの場所の入れ替えをするにはどうすればいいのだろうとなった次第です。 -- F1大好き? 2007-12-29 (土) 03:30:45
  • 常に1Pと2Pが向き合っていることが条件になってしまいますが、カメラの位置をe3dCrossで算出しているとして
    diffx = p1のx座標 - p2のx座標
    diffy = p1のy座標 - p2のy座標
    diffz = p1のz座標 - p2のz座標
    diffx2 = p1のx座標 - camposx(カメラのx座標)
    diffy2 = p1のy座標 - camposy(カメラのy座標)
    diffz2 = p1のz座標 - camposz(カメラのz座標)
    E3DVec2CCW diffx, diffz, diffx2,diffz2, vecCCW
    if vecCCW=-1:E3DCross diffx, diffy, diffz, 0, 1, 0, crossx, crossy, crossz
    if vecCCW= 1:E3DCross -diffx, -diffy, -diffz, 0, 1, 0, crossx, crossy, crossz
    camposx = centerx + crossx * cameradist
    camposy = cameraheight
    camposz = centerz + crossz * cameradist
    camdirx = centerx - camposx
    camdiry = 0
    camdirz = centerz - camposz
    cameradiv = 3
    E3DSetCameraPos camposx, camposy, camposz
    E3DCameraLookAt camdirx, camdiry, camdirz, 0, cameradiv
    という感じでどうでしょうか -- 26℃? 2007-12-29 (土) 11:56:25
  • バーチャなどのサシ格闘なら
    E3DGetScreenPos2 scid, posx1, posy1, posz1, screenposx1, screenposy1, p1chk
    E3DGetScreenPos2 scid, posx2, posy2, posz2, screenposx2, screenposy2, p2chk
    if p1chk & p2chk{;両方画面内
    if screenposx1 > screenposx2{
    rightplayer = 1 ;プレイヤ1が右側
    }else{
    rightplayer = 2 ;プレイヤ2が右側
    }
    }
    -- ぼおん? 2007-12-29 (土) 16:56:15
    くらいでいいんじゃないかと。
  • 26℃さん、ありがとうございます。今回はキャラクタ同士が常に向き合ってない状態にもなります(相手の攻撃を避け、相手の背中に回り込んだりします)ので、ぼおんさんの方を利用させていただきます。
    みなさん、今回は本当にありがとうございました。また他の方々からも質問があった時にも、皆さんの知恵をお貸しくださいますようお願いします。
    改めて、お礼申し上げます。ありがとうございました。 -- F1大好き? 2007-12-29 (土) 20:28:47