2012-10-08 3 views
1

나는 Unity3D로 고전적인 노키아 뱀 게임에 강선전도에 종사하고있다. 우리는 우리의 뱀이 일하는 방식을 다시 시도하고 싶다고 결정했습니다. 여기Unity3d 강체로 Nontraditional 뱀 게임 충돌

동영상 새로운 제어 설정으로, 지금까지 내가 무엇을의 데모를 보여 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

솔루션은 실제로 매우 간단합니다. 드래그 객체와 콜라이더 사이에 벡터를 가져와 벡터를 정규화하고 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)); 
} 
입니다