2014-06-16 2 views
3

2D 게임을 제작 중입니다. 나는 캐릭터와 타일을 가지고있다. 타일은 1 x 1 단위이며 장면에 배치됩니다.타일로 타일 이동

다음 코드를 사용하여 문자를 이동했습니다. 다음은 내 캐릭터 ("Hero")의 코드입니다.

public class Hero : MonoBehaviour { 
    private Vector2 speedX = new Vector2(1, 0); 
    private Vector2 speedY = new Vector2(0, 1); 

    void Update() { 
     if(Input.GetKey("left")) { 
      rigidbody2D.MovePosition(rigidbody2D.position - speedX * Time.deltaTime); 
     } else if(Input.GetKey("right")) { 
      rigidbody2D.MovePosition(rigidbody2D.position + speedX * Time.deltaTime); 
     } else if(Input.GetKey("up")) { 
      rigidbody2D.MovePosition(rigidbody2D.position + speedY * Time.deltaTime); 
     } else if(Input.GetKey("down")) { 
      rigidbody2D.MovePosition(rigidbody2D.position - speedY * Time.deltaTime); 
     } 
    } 
} 

작동하지만 예상대로 움직이지 않습니다. 화살표 키를 한 번 누르면 0.2 단위 씩 움직입니다. 플레이어가 키 당 1 단위 이동하도록하려면 어떻게해야합니까?

무엇을 놓쳤습니까?

문서 : 나는 당신이 키를 누르면 한 번 새 위치로 캐릭터의 순간 이동을 달성하고자처럼 보이는 무엇을보고에서 Rigidbody2D.MovePosition

+0

당신이 RigidBody2D를 사용하는 이유는 무엇입니까? 게임에서 물리학을 사용하려고합니까? –

+0

게임에서 충돌 감지가 필요합니다. – Raptor

답변

3

. 당신은 Time.deltaTime에 의해 속도 (speedX 또는 speedY)를 곱 할 필요가 없습니다

  1. : 그렇다면, 당신은 여기에 두 가지 오류가 있습니다.
  2. Input.GetKey은 키를 누른 모든 프레임에서 true를 반환하기 때문에 (키를 누를 때마다 한 번씩이 아니기 때문에) 원하는 것을 사용하지 않습니다. 대신 Input.GetKeyDown을 사용해야합니다.

그래서, 당신의 코드는 다음과 같아야합니다

public class Hero : MonoBehaviour { 
    private Vector2 speedX = new Vector2(1, 0); 
    private Vector2 speedY = new Vector2(0, 1); 

    void Update() { 
     if(Input.GetKeyDown("left")) { 
      rigidbody2D.MovePosition(rigidbody2D.position - speedX); 
     } else if(Input.GetKeyDown("right")) { 
      rigidbody2D.MovePosition(rigidbody2D.position + speedX); 
     } else if(Input.GetKeyDown("up")) { 
      rigidbody2D.MovePosition(rigidbody2D.position + speedY); 
     } else if(Input.GetKeyDown("down")) { 
      rigidbody2D.MovePosition(rigidbody2D.position - speedY); 
     } 
    } 
} 
+0

매력처럼 작동합니다! Unity 3D 문서는 나를 잘못된 길로 안내합니다. – Raptor

관련 문제