2012-10-08 82 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)); 
}