2014-04-21 3 views
0

화살표 키를 사용하여 큐브를 좌우로 움직여 Unity의 2D 모드로 이동하려고합니다.화살표를 눌렀을 때 큐브를 움직이고 2 개의 큐브를 바꾼다

큐브의 위치를 ​​부착 된 충돌 자로 바꾸고 싶지만 코드가 전혀 작동하지 않는 것 같습니다.

public float Jump = 0.6f; 
Vector3 positionP, positionS, position, pos; 
public GameObject Swapable; 
public GameObject Player; 

void Start() 
{ 
     positionS = Swapable.transform.position; 
     positionP = Player.transform.position; 
} 

// Update is called once per frame 
void Update() 
{ 

     if (Input.GetKey (KeyCode.RightArrow)) { 
       transform.position = Vector2.right * Jump; 
     } 
     if (Input.GetKey (KeyCode.LeftArrow)) { 
       transform.position = -Vector2.right * Jump; 
     } 
} 

void OnTriggerEnter2D (Collider2D col) 
{ 
     if (col.Equals ("Red")) { 
       Debug.Log ("Touched"); 
       position = positionS; 
       pos = positionP; 
       Player.transform.position = position; 
       Swapable.transform.position = pos; 

     } 
} 

내가 뭘 잘못하고 있니?

+0

무엇이 문제입니까? 더 자세히 설명해야합니다 ... OnTRiggerEnter2D 메서드를 호출하는 데 문제가 있습니까? 큐브를 움직이는 데 문제가 있습니까? 또는 당신의 위치를 ​​바꾸는 데 문제가 있습니까? – Savlon

+0

예. OnTriggerEnter2D 및 OnCollisionEnter2D 메서드를 사용하여 두 큐브 간의 충돌을 감지했지만이 방법은 2D에서 작동하지 않는 것 같습니다. –

답변

0

큐브가 (0.6,0)로만 이동 중이며 변환되지 않습니다. 당신의 업데이트 방법에서

당신은 전화 :

transform.position = Vector2.right * Jump; 

Vector2.right 항상 (1,0)를 반환합니다. 점프는 항상 0.6

입니다. 따라서 위치를 (0.6,0)으로 설정하는 반면에 점증해야합니다.

transform.position = transform.position + Vector2.right * Jump 

적어도이 큐브를 지금 사용해보십시오. 거기에서 충돌 오류를 수정하려고 할 수 있습니다.

편집 :

좋아,이 당신을 위해 교환 처리합니다. 이 스크립트로 전체 게임을 관리하는 마스터 게임 개체가 필요합니다. 위치를 바꿀 때 스왑 기능을 호출하십시오.

public class TilePositions 
{ 
    //The objects in your grid 
    public Transform[,] objects; 

    //Offset from (0,0) that your grid's top-left is at. 
    public Vector3 offset; 

    //Scale of your grid 
    public Vector2 scale; 

    //Swap the objects at position one and position two in the grid 
    public void Swap(Point one, Point two) 
    { 
     var temp = objects[one.x,one.y]; 

     objects[one.x,one.y] = objects[two.x,two.y]; 
     objects[two.x,two.y] = temp; 

     objects[one.x,one.y].Position = new Vector3(one.x,one.y,0) * scale + offset; 
     objects[two.x,two.y].Position = new Vector3(two.x,two.y,0) * scale + offset; 
    } 

    /// <summary> 
    /// Converts a transform's vector3 position to a Point struct 
    /// </summary> 
    /// <param name="obj">The transform whose position is to be converted</param> 
    /// <returns>System.Drawing.Point for the grid's position</returns> 
    private Point PositionToPoint(Transform obj) 
    { 
     var position = (obj.Position - offset)/scale; 
     return new Point((int)position.x, (int)position.y); 
    } 
} 
+0

감사합니다. 나는 그것을 가지고있어 :) –

+0

사실, 나는 터치 또는 화살표 키 cube1 고정 된 위치로 이동하고 다른 cube2 cube1의 위치를 ​​취할 좋아. 캔디가 충돌하거나 트리거 할 때 캔디를 바꿔 버리는 것처럼 –

+0

개체의 위치를 ​​바꾸거나 그 중 하나를 고정 된 위치로 이동 하시겠습니까? 이 두 가지 행동은 동일하지 않습니다. 이 고정 위치 란 무엇입니까? –

관련 문제