2012-10-08 46 views
1

我正在努力对Unity3D的经典诺基亚蛇游戏进行转换。我们决定尝试重做我们的蛇的工作方式。这里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)); 
     } 

回答

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)); 
}