1

Unity3Dで古典的なノキアのヘビゲームにひねりを加えています。私たちは、ヘビの働き方をやり直したいと思いました。

ここのビデオは、新しいコントロール設定http://dl.dropbox.com/u/4306843/Unity%202012-10-08%2010-11-05-44.avi http:で私がこれまでに持っているもののデモを示しています 。 //dl.dropbox.com/u/4306843/Unity%202012-10-08%2017-51-40-42.avi

私は基本的にこの影響を与える方法を探していますが、剛体と自己(または頭だけ)と衝突します。

コードはここの情報に基づいています。 http://processing.org/learning/topics/follow3.html

ヘビが剛体を貫通しないようにする方法についての助けや提案は大歓迎です!

作業の大部分はここで行われ、チェーン内の各オブジェクトに対して呼び出されます。

void dragSegment(int i, float xin, float yin)
        {
            float dx = xin - x[i];
            float dy = yin - y[i];
            float angle1 = Mathf.Atan2(dy, dx);
            x[i] = xin - Mathf.Cos(angle1)*segLength;
            y[i] = yin - Mathf.Sin(angle1)*segLength;

            //set object pos
            obj[i].GetComponent<Rigidbody>().MovePosition(new Vector3(x[i],y[i],0));
        }
4

1 に答える 1

0

解決策は実際には本当に簡単でした。dragobjectとcolliderの間のベクトルを取得し、ベクトルを正規化してx位置とy位置に追加し直して、通常のように更新する必要がありました。

これが更新されたコードです、

void DragSegment(int i, float xin, float yin)
{
    if (obj[i].Hit)
    {
        Vector2 objV = new Vector2(x[i] - obj[i].Obj.GetComponent<Body ().hitObjectPos.x, y[i] - obj[i].Obj.GetComponent<Body>().hitObjectPos.y);
        objV = objV.normalized;

        x[i] += objV.x*1.2f;
        y[i] += objV.y*1.2f;

    }
    //Getting difference with last objects position
    float dx = xin - x[i];
    float dy = yin - y[i];
    angle1 = Mathf.Atan2(dy, dx);
    x[i] = xin - (Mathf.Cos(angle1) * segLength);
    y[i] = yin - (Mathf.Sin(angle1) * segLength);

    //simple gravity effect
    if (gravity == 1) y[i] += 0.1f;

    obj[i].Obj.transform.position = (new Vector3(x[i], y[i], 0));
}
于 2012-10-10T04:25:51.173 に答える