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

解决方案实际上非常简单。我需要在拖动对象和对撞机之间获取向量,对向量进行归一化并将其添加回 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 回答