パスワードを忘れた? アカウント作成
14738109 journal
日記

yumeの日記: Unity制作 メデューサ・ゲーム #16

日記 by yume

●ゴール
1秒間乗り続けるとステージをクリアするゴール。
これは円形のisTriggerコライダーを作り、OnTriggeerStay2Dで数を数えて、指定秒数カウントしたらステージクリアとすればOK。

●太った兵士
太った兵士の基盤は普通の兵士でよい。普通の兵士より足が遅く、石像になったあとに壁になる。
問題は壁だ。このゲームでは壁にはいくつかの仕事がある。
1.実際にメデューサにぶつかる壁としての機能
4.兵士たちの視界を遮るポリゴン
2.メデューサの視界を遮るポリゴン
3.兵士たちの経路探索の通行不能エリア
このうち、1と2はそのままPolygonCollider2Dを設定しておけばいい。
3はメデューサのFOVクラスに、「AddPoly」メソッドを作り、それを呼び出す。
4は経路探索のスキャンを再度やればいいんだろうか?
Astart公式曰く、
一部のオブジェクトが移動・作成・破棄された場合は:

// As an example, use the bounding box from the attached collider
Bounds bounds = GetComponent<Collider>().bounds;
var guo = new GraphUpdateObject(bounds);

// Set some settings
guo.updatePhysics = true;
AstarPath.active.UpdateGraphs(guo);

こうするらしい。今回の場合、FatSoldierの石像のStart関数でこれを呼び出す(生成時にグラフを更新する)
太った兵士の石像のポリゴンはこんな感じ。15頂点もあるのでちょっと贅沢。

●窓
視界は通るが壁である、というものを作る。
経路探索が壁を定義する条件は、それがPolyWallレイヤーにあるColliderを持つオブジェクトであるかどうか、なので
ここで判別するレイヤーを増やす(MoveImpairTerrain)。
なんだか若干複雑になったので、カーテン、窓、壁をまとめると:

壁:視界と移動を遮る。PolyWallタグ、PolyWallレイヤー。
窓:移動を遮る。Windowタグ(未使用)、MoveImpairTerrainレイヤー。
カーテン:視界を遮る。PolyWallタグ、ViewImpairTerrainレイヤー。
視界がぶつかるかどうかは、PolyWallレイヤーないしViewImpairTerrainレイヤーにあるかどうかで決まる。。
移動がぶつかるかどうかはColliderで。
経路の歩行禁止エリアはPolyWallレイヤーとMoveImpairTerrainレイヤーで。
視界のポリゴン頂点を得る対象はPolyWallタグ。

●依存関係の整理
鏡の前に、雑なつくりのコンポーネントを掃除する。
鏡もプレイヤーと同じように、FOVを持たせたいが、今のFOVはPlayerありきで作ってしまっている。FOV側がPlayerのポジションやaim角度などを要求しているのだ。
これを逆に、Player側からFOVにaimやポジションを与えるという形にすれば、鏡にFOVを実装する際も、鏡側から独自にaimやポジションを与えればよいということになり、使いまわすことができるようになった。

●鏡
さて鏡にはFOVを持たせ、そのFOVをONにするかどうかと、FOVの角度をミスティの位置から算出しなければならない。
まず「鏡がミスティの視界内にあるか」をチェックする。これは邪眼と同じように、鏡までの地点をLineCastすればよい。
視界内にあるとき、MirrorControllのisSeeingをTrueにし、そうでないときFalseにする。
isSeeingがTrueならメッシュとFOVをアクティブにする。ここまでOK。
問題は角度である。理想的に考えれば、入射角と反射角は等しいらしい。
鏡が上向きだとすれば、鏡の向きは約1.57ラジアン度。鏡から見てミスティが左45度の位置(鏡原点から見て1.57rad+0.785rad)にあるなら、向ける視線は右45度の位置、つまり0.785ラジアン度(1.57rad-0.785rad)に向く。
ミスティの向きは、ミスティの邪眼コンポーネントから与える。邪眼コンポーネントではミスティから鏡への角度を計算しているので、これをそのまま渡す。
そうするときっちり逆向きの角度が得られるから……。ミスティが左45度にいるなら-0.785が得られ、右45度なら-2.355が得られる。ん、これを-1でかければいいのかな?
でも鏡の向きを決めてないな……なんとなく動いてるけど正しくはないような。眠いから明日にしよう。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...