トップページ > 記事閲覧
3Dアクション基本のTPSカメラについて
名前:chairo 日時: 2020/08/28 13:46

こんにちは。 DXライブラリの3dサンプルプログラム(ttps://dxlib.xsrv.jp/program/dxprogram_3DAction_CollObj.html)をいじって学習していますが、 (動かした動画-ttps://drive.google.com/file/d/1l6YOwO4KxWKbqUJvd4qCglDnDMyMBlB3/view?usp=sharing) フォートナイトやメタルギアソリッドXのような、特定のキーを押したときにTPS視点のカメラに移行する方法を知りたいです。 (動画の状態から特定のキーを押すと ttps://qiita.com/K_phantom/items/d5d92955043137a59d8f にあるシューティング系のようなカメラに切り替わるようにしたい) ソースコードはこちらになります。 ttps://drive.google.com/file/d/1Szar4h6WWcUtcdG54njk2BjUF3D0Avvy/view?usp=sharing よろしくお願いします。
メンテ

Page: 1 |

Re: 3Dアクション基本のTPSカメラについて ( No.1 )
名前:管理人 日時:2020/08/29 01:59

了解しました 3DサンプルプログラムをTPS視点のカメラにしたプログラムを作成してみますので 数日ほどお待ちください m(_ _)m
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.2 )
名前:管理人 日時:2020/08/31 10:54

お待たせしました、3DサンプルプログラムをTPS視点にしてみました ただ、出来たことは出来たのですが、これで良いのかな? という印象なので、 よろしければお手元で実行してみていただけないでしょうか? m(_ _)m https://dxlib.xsrv.jp/temp/3DAction_TPS.cpp
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.3 )
名前:chairo 日時:2020/08/31 18:53

お返事遅れました。ありがとうございます。後で実行してみます! 取り急ぎ失礼いたします。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.4 )
名前:chairo 日時:2020/09/01 17:38

ttps://drive.google.com/file/d/1PdYzy1HzlXy7g0wEhaU7nJolI2puXmKy/view?usp=sharing お陰様で、思った通りのTPSカメラの切り替えをすることができました! 参考プログラムの作成、ありがとうございました!
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.5 )
名前:管理人 日時:2020/09/02 00:43

ご希望の処理が実現できたようで何よりです! 本件とは話がそれてしまいますが、動画を拝見する限りではアンチエイリアスを使用されていないようですが、 アンチエイリアスを使用するとジャギが無くなり見た目が綺麗になりますので、よろしければ DxLib_Init の呼び出し前に SetFullSceneAntiAliasingMode( 4, 4 ); ↑と記述して、裏画面に対するアンチエイリアスを有効にしてみてください ( 引数の 4, 4 の値が大きいほど綺麗なアンチエイリアスになります( 但し値が大きいほど処理負荷が大きくなります ) ) もし MakeScreen で作成された画面に対して3D描画を行われている場合は、MakeScreen を呼ぶ前に SetCreateDrawValidGraphMultiSample( 4, 4 ); ↑と記述すると、MakeScreen で作成される画面がアンチエイリアス機能付きになります よろしければお試しください m(_ _)m
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.6 )
名前:chairo 日時:2020/09/02 20:17

ありがとうございます。さっそく試してみます。 実は、別の問題が出てきてしまったのでご相談させていただければと思います。 dxライブラリでのfbxファイルの読み込み(ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=3517)を試しているのですが、うまくいきません。 fbx sdkは2020.1を、visual studioをダウングレードして2017を使用しています。 よろしくお願いします。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.7 )
名前:管理人 日時:2020/09/03 01:12

すみません、うまくいかないとのことですが、具体的にはどのようにうまくいかないのでしょうか?
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.8 )
名前:chairo 日時:2020/09/03 12:20

失礼しました。上記のリンク先掲示板No.4の手順を上記の環境で試してみて、MV1LoadModelのfbxファイルの読み込みができませんでした。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.9 )
名前:管理人 日時:2020/09/03 23:11

ご返答ありがとうございます No.4 の手順を試してみて、特に DxLibMakeプロジェクトでのビルドではエラーは発生しなかったにも関わらず MV1LoadModel で fbxファイルの読み込みはできなかった、ということでしょうか? 一応やり方は現在でも載せていただいたスレッドの通り…と思ったのですが、現在は VisualStudio 用の libファイルがバージョン毎に分かれていてかなり複雑になっていました 現状ではこちらの『DXライブラリのソースを自分のプロジェクトに入れてコンパイルする』方式が あっているかもしれませんので、よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibSourceTest_WithUseCLib.zip ↑こちらの圧縮ファイルの中にあるのは、Test.cpp の中に書かれたプログラムを 実行するプロジェクトなのですが、通常のDXライブラリの使い方と異なり、 DxGraphics.cpp や DxFont.cpp などのDXライブラリのソースを直接コンパイルして 実行する方式になっています この方法の場合、載せていただいたスレッドのように DxLibMake で作成した libファイルを 自分のプロジェクトにコピーする、といった手順が省け、どのバージョン用の libファイルを コピーするべきなのか迷わずに済むのでお勧めです よろしければ DxLibSourceTest_WithUseCLib.zip の中のプロジェクトの設定を参考に ご自身のプロジェクトでも『DXライブラリのソースを直接コンパイルして実行する』方式を 試してみてください m(_ _)m
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.10 )
名前:chairo 日時:2020/09/09 16:54

ありがとうございます!試してみますね。 さて、サンプルゲームの「弾当てゲーム」のスクリプト(ttps://dxlib.xsrv.jp/dxsample.html)をもとに、いよいよ射撃のコードを組んでみたのですが、 (動画:ttps://drive.google.com/file/d/1_snx2CDzPiZzu9OUcEKo9-Fws1MWMq5L/view?usp=sharing) 「弾当てゲーム」のスクリプトは、一定の方向にしか玉が飛ばない仕様となっているため、モデルの向いた方向(3dアクション基本で方向ボタンを入力した方向)に玉(動画の注射器)を飛ばすことができずに困っています。 3Dモデルの移動キーを入力した方向(モデルの顔が向いている方向、矢印キーの←を押したら左の方向)に玉(弾丸)を飛ばす処理を知りたいです。 ソースコードは以下になります。 ttps://drive.google.com/drive/folders/1GYiExT6A9MnPA9Kk-Vgoo-fNOYl-ZUpx?usp=sharing よろしくお願いします。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.11 )
名前:管理人 日時:2020/09/10 02:57

アップしていただいたプログラムではショットの Speed の代入処理が Shot->Speed = VScale(VNorm(VGet(TEKI_INIT_X - pl.Position.x, pl.Angle + DX_PI_F, 0.0f)), PC_SHOT_SPEED); となっていますが、プレイヤーの向いている方向は pl.TaregetMoveDirection に代入されていますので Shot->Speed = VScale(pl.TaregetMoveDirection, PC_SHOT_SPEED); ↑のようにすればプレイヤーの向いている方向にショットを飛ばすことができます
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.12 )
名前:chairo 日時:2020/09/18 02:10

引き続きありがとうございます。 ショットを試してみましたが、銃口から発射される弾(注射器)の角度を一定(モデルの顔が向いている向き、構えている拳銃の銃口向きと同じ向き)にするにはどうしたらいいでしょうか? 動画 ttps://drive.google.com/file/d/1wI3wlmAkqaqt8VSDMzr3iJl09QY5yJ2j/view?usp=sharing 実現したい処理 ttps://drive.google.com/file/d/1WBdzmM75YuXhckc_WhqbPe6iL5vLyKRk/view?usp=sharing ソースコードは以下になります。 注射器のハンドルはpl.shotgraphhandleとなります。 ttps://drive.google.com/drive/folders/1Lqt7_BpgIpF-bifnLPDw6f_xYBNEarAE?usp=sharing よろしくお願いします。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.13 )
名前:管理人 日時:2020/09/18 22:55

MV1SetRotationYUseDir という関数を使えば向きを一定にできると思います MV1SetRotationYUseDir( pl.shotgraphhandle, 飛んでいく方向のVECTOR, 補正角度 ); ↑『飛んでいく方向のVECTOR』は飛ばす際の移動値に使用している VECTOR をそのまま渡してください 『補正角度』はモデルの初期の向きによって異なるので、最初は 0.0f を渡して、向きが違ったら DX_PI / 2.0f を渡して90度向きを補正して、それでも向きが違ったら -DX_PI / 2.0f を渡して -90度向きを補正して… といった感じで正しい向きになる補正値を探してみてください m(_ _)m
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.14 )
名前:chairo 日時:2020/09/25 00:36

引き続きご返信ありがとうございます。試しています。 現在、ショットをテストしているのですが、いつもショットを2発発射した後に、弾丸(注射器)が一瞬だけ表示される(瞬間移動?)のような挙動になってしまって困っています。 動画 ttps://drive.google.com/file/d/1bFZ0U9LIg9haqV9Nfi6E6FA973H0ZpB3/view?usp=sharing 常時注射器のショットを最初の2発のような直線移動にするにはどうすればよいでしょうか。 ソースコードは以下になります。 ttps://drive.google.com/drive/folders/1RhZmVNXT1xUamKEjj-wQXkE-DnsoidoI?usp=sharing よろしくお願い致します。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.15 )
名前:管理人 日時:2020/09/26 00:13

申し訳ありません、一般的なプログラムのバグは極力ご自身の力で解決するようにしてください m(_ _)m 正常に動作しない原因は chairoさんご自身が組まれたプログラムの中にありますので、 一つ一つ原因となりそうな箇所のコードを調べてみてください
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.16 )
名前:chairo 日時:2020/09/26 19:39

了解しました。一応、バグの原因は弾当てゲームのpcshotmoveのUseflagによる判定だと分かったのですが、ここからどう修正していいか、何をどうすればいいかが分からない状況です...。 void PcShotMove(CHARA* ch ) { int i, j; PCSHOT* Shot; CHARA* chara; chara = Characommon.Char; DrawFormatString(0, 0, GetColor(0, 255, 0), "hp%d", chara->Hp); Shot = pl.Shot; for (i = 0; i < PC_SHOT_MAX_NUM; i++, Shot++) { if (Shot->UseFlag == FALSE) continue; switch (Shot->Type) { case PC_SHOT_TYPE_NORMAL: case PC_SHOT_TYPE_SUB: Shot->Position = VAdd(Shot->Position, Shot->Speed); Shot->Speed.y -= PC_SHOT_GRAVITY; } { for (j = 0; j < TEKI_MAX_NUM; j++, chara++) { if (chara->UseFlag == 0 || chara->HitFlag == 0) continue; if (VSquareSize(VSub(Shot->Position, chara->Position)) > TEKI_HIT_SIZE * TEKI_HIT_SIZE) continue; PlaySoundMem(GameData.DamageSoundHandle, DX_PLAYTYPE_BACK); chara->Hp -= 10; pl.ShotNum--; } /*if (chara->Hp == 0) { Chara_Terminate(&npl[1].CharaInfo); //Chara_PlayAnim(ch, 0); }*/ } } } if (chara->UseFlag == 0 || chara->HitFlag == 0) continue;の部分をif (chara->HitFlag == 0) continue;にすると何度撃っても直線移動になりますが、 敵に18発以上当たると突然画面が真っ暗に(chara->hp-=10をコメントアウトにすると弾が出なく)なります。(原因が分からず、各種terminateにブレークポイントを合わせてもモデルが削除された感じではありませんでした。) 極力自身の力で解決したいのですが、参考にできる資料がなく、それ以上にどう修正したらいいかが分からないため、詰まっている状況です...。
メンテ
Re: 3Dアクション基本のTPSカメラについて ( No.17 )
名前:管理人 日時:2020/09/27 21:56

ご自身で組まれたプログラムをどう修正すれば良いか分からないという場合は ご自身の力量に見合わないプログラムを組んでしまっている可能性があります これからどんどん追加で組んでいくプログラムが理解できていない状態になっていますと 何かある度に誰かに頼らなくては解決できなくなってしまいますので、 どうしても原因が突き止められず修正もできない場合は一度プログラムを0に戻して 理解てきている範囲で組みなおした方が良いと思います
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存