mieki256's diary



2013/10/13() [n年前の日記]

#1 [unity] RaycastAllでハマった

Unityのスクリプト上には _Physics.RaycastAll というメソッドがあって。伸ばしたレイ(=光線)と交差する全てのポリゴンを ―― ポリゴンとの交点情報( _RaycastHit )を全て返してくれるので、コレを使って地形モデルとのアタリ判定ができないかなと実験してたのだけど。思ったように行かなくてハマったり。

以下のような地形モデルを作って実験。
地形モデル

空中に足場がある地形モデルなわけだけど、その空中の足場から、下に向かってレイを出せば、足場+地面で、交点情報が2つ以上返ってくるはず。 てな感じの判定が可能なるはず。

ところが、何度試しても、交点情報が1つしか返ってこない…。

調べてみたら、どうやらこの RaycastAll ってのは、レイと交差した「オブジェクト」の個数分、情報を返すようで。地形モデルは1つのオブジェクトだから、交点情報を1つしか返してこないのは仕様通りで。試しに足場オブジェクトを2つ3つ置いて試したら、ちゃんと2つ3つ返ってきた。

しかしこのままでは、空中の足場の交点しか得られない。

空中の足場は別オブジェクトとして ―― 地面のFBXモデルとは別のFBXモデルとしてエクスポート/インポートする、というやり方も試してみたのだけど。たしかにそれなら思った通りの結果が得られる。が、エクスポート/インポート作業が面倒臭くて。やはり地形モデルは1つにしておきたい。

仕方ないので、 _Physics.Raycast を使って、何度もレイを出し直すやり方を試したり。何かと交差していたら、その交点から少し先に進んだ場所から、またレイを出し直す。それを、何一つぶつからない状態になるまで繰り返す。
    RaycastHit[] GetRayCastHits(Vector3 pos, Vector3 vec, float dist) {
        Vector3 ofs = vec.normalized;
        ArrayList a = new ArrayList();
        RaycastHit hit;
        while (Physics.Raycast(pos, vec, out hit, dist)) {
            a.Add(hit);
            pos = hit.point + ofs;
        }
        return (RaycastHit[])a.ToArray(typeof(RaycastHit));
    }
これなら、1つの地形モデルオブジェクトに対しても、望む結果が得られた。処理は重くなってそうだけど。

後は足場から降りる処理を書くだけ。と思ったけれど、これを書いてる途中で気がついた。これでは、敵キャラや敵弾やプレイヤーの弾が足場の下に居た時も、そいつらを足場として判定しちゃいそうだな…。どうしよう…。

以上です。

過去ログ表示

Prev - 2013/10 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project