1人でゲームが作れるように修行します。2 (487レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

319: 名前は開発中のものです。 [sage] 2011/09/15(木) 06:32:14.49 ID:I5TXtYrP(1/6) AAS
「4.選手をまず1人表示し、動かせるようにする」

選手の3Dモデルデータが必要となるが、とりあえず雪だるまか、こけしか、冷蔵庫で代用することにし、
ここで本質的に重要なのは操作方法の決定とパラメータ調整ではないかと思う。

しかも、単に選手の2次元移動とはいいつつも、実際にはカメラの方向によってプレイヤーが混乱しない
ような工夫が必要なため、快適なプレイ環境を実現する操作方法というのは、実に奥が深いと思われる。
ここの作りこみ次第で、ゲームの面白さが左右されるはず。

しかしとりあえず暫定的なものにしておいて先の段階へ進みたいのであれば、
カメラ位置をセンターラインの延長上空、注視点をセンターマークにし、フィールド全体が見渡せる画面とし、
選手はカーソルキーかゲームパッドで移動するようなオーソドックスな方法で構わない。

この段階において、プレイヤーはフィールドの中だけ移動できるように境界条件処理をしておくと良い。
また、ボールとの関わりについては、少なくともこの段階では相互にまったく干渉しないことも確認しておく。
321: 名前は開発中のものです。 [sage] 2011/09/15(木) 07:07:32.22 ID:I5TXtYrP(2/6) AAS
「5.選手とボールの接触判定をし、マウスクリックの代わりに選手が蹴るようにする」

先の段階で放置しておいた選手とボールの作用条件について実装する。

選手もボールもともに運動する物体であることから、まずは、
段階2の(3)および(5)で得られるボールの位置および速度を、
判定対象選手のローカル座標系における相対位置、相対速度に変換する。

その上で下記の順に判定、処理を行う
(1) ボールの相対位置が選手に十分近い(距離<ボール半径+体格半径)かつ
  相対速度ベクトルが選手側に向かってきている場合、
  ボールがコントロールできない位置で単純に当たったものとみなし、
  メソッド2の(4)による反射処理を行う。法線はワールド座標系に逆変換すること。
  その際、選手自身の移動速度の法線方向成分を加味するため、
  反発係数は1.0を超えることも有り得る。

(2) ボールの相対位置が選手正面の特定領域内にあり、
  かつ選手がコントロールする意思を持った状態の場合、
  その意思に従いトラップするなりキックするなりでボールの相対速度を決め、
  ボールメソッド2(6)を呼び出す。
  その際も、選手ローカル座標からワールド座標系に戻してから渡す。

いずれでもなければ、選手はボールに干渉しない。
322: 名前は開発中のものです。 [sage] 2011/09/15(木) 07:32:47.70 ID:I5TXtYrP(3/6) AAS
>>320
ボールをトラップするも、ドリブルも、パスもシュートも、本質的には
「選手がボールをコントロールできる相対位置・速度条件にいるとき、どのようなコントロールの意思を示すか」
によって、ボールに新しい運動速度を与えるという処理に統一できる。
つまり、選手はボールに対しては速度にしか干渉できないように制限している。

これによって、もし多数の選手が団子状になったとしても、どう転がるかわからなけれど
試合自体は進行可能になると思う。

先着選手にボールが帰属(優先キープ)してしまうようなルールだと、ゲーム性が変わってくると思うけれど、
格闘よりもフィールド戦略を主にするなら、それもありかと思う。
323: 名前は開発中のものです。 [sage] 2011/09/15(木) 21:25:19.83 ID:I5TXtYrP(4/6) AAS
「6.CPU選手をまずは1人登場させ、動くようにする」

4で書き忘れたけれど選手クラスの定義には、
・現在位置(x,yz)
・向いている方向
・移動速度
・チームの識別符号
など、描画やボールへの干渉判定に必要な状態変数を持たせる。

それを少し拡張して、
・目標位置
・目標方向
をメンバに加え、
「現在位置が目標位置から遠ければ、
 向いている方向を目標位置の方向に1フレーム期間で回れる角度だけ補正し、
 移動速度も制限速度内で目標位置の方向に加速する。
 目標位置い近くなったら、
 向いている方向を目標方向に近づけるとともに、
 目的地で静止できるように減速する」
というような処理関数を作ってみる。

すると、CPU選手には「ボールを相手ゴールに向かってコントロールできる位置と方向」を与えれば、
毎フレームごとにボールに向かって突進するはず。

ボールがコントロール可能な状態(5の(2))になったなら、敵ゴールに向かってボールを蹴り出すが、
小さくければおそらくドリブルっぽくなるだろうし、ゴールに十分近づいたら強く蹴ってシュートにすればいい。
324: 名前は開発中のものです。 [sage] 2011/09/15(木) 22:00:59.48 ID:I5TXtYrP(5/6) AAS
「7.ポジション別にCPU選手のAIを調整する」
ここまでくると脳内プログラミングでは難しくなってくるが敢えて思考実験を続けてみる。

6での拡張で、個々の選手に対して、
・ボールをコントロールできない状態なら、目的地と方向を指示する
・ボールをコントロールできる状態なら、ボールのキック方向と強さを指示する
の2パターンだけ考えればよくなった。

目的地については、チームで戦うときは必ずしもボールに向かう必要はなく、
むしろパス回しを活用していかに早く安全に敵陣深く攻め込めるかを考えた配置に
なるよう、監督になった気分でそれぞれの選手に指示するべきである。

具体的には、選手間の位置関係から、ボールをコントロールできる(可能性が最も高い)選手から、
最前線の選手までの経路探索アルゴリズムを応用しつつ、個々の選手がより有利な位置に
移動するような評価関数などを駆使して、ということになりそうだが、脳内シミュレーションでは無理っぽい。

なお、選手への指示に上の2パターンを出せば、あとは自動で動いてくれるようにしたので、
ゲームパッドで選手ひとりを直接動かす操作方法は、この段階でデバッグ機能として卒業したい。

その代わりに、プレイヤーもマウスなどを使って、「どのプレイヤーをどこへ動かす」という指示を
リアルタイムに出せるインタフェースを作っておく。
こうなると完全にサッカーチームの監督ごっこというゲームシステムが固まってくる。

もしくは、ジョイパッド操作は、チーム内で一人だけ動きが違う「キーパー」操作に割り当てても良いかも。
325
(1): 名前は開発中のものです。 [sage] 2011/09/15(木) 22:21:08.89 ID:I5TXtYrP(6/6) AAS
このあと>>252では仕上げに入っているけれど、補足すべき要素としては、
A.選手同士の接触判定と解決処理
B.最後にボールに触れた選手によるスローイン、ゴール・コーナーキックの判別
C.オフサイドの判定
D.AI実装のための評価関数の充実
などが必要じゃないかと思う。

「8.タイム、スコア、勝敗、タイトル画面などの装飾要素を実装する」については、
まあ、そのまんま好きなように作りこめば良い。

長々書いたけれど一応これで脳内では完成したつもり。
本当に実装できるか確かめていないので何の保証もないけれど、
なにか一部でも参考になれば嬉しいので自由に使ってくださいな。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.017s