2014-05-19 3 views
1

플레이어가 화면의 왼쪽을 칠 때 플레이어가 왼쪽으로 이동하기를 원합니다. 바로 지금, 내 플레이어는 마우스 버튼을 누른 상태로 움직입니다. 내가 정말로 원하는 것은 화면을 한 번 누르면 목표 위치에 도달 할 때까지 왼쪽으로 계속 움직이는 것이다.강체를 부드럽게 유영합니다.

누군가이 문제가 발생하도록 내 코드에서 누락 된 부분을 알려주실 수 있습니까?

void FixedUpdate() 
{ 

    if(Input.GetMouseButtonDown(0)) 
    { 
     if(Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3) 
     { 
      if(position == middle) 
      { 
       MoveLeft(); 
      } 
     } 
    } 
} 

void MoveLeft() 
{ 
    var pos = rigidbody.position; 
    float xPosition = left.transform.position.x; 
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime); 
    rigidbody.position = pos; 
} 

내 플레이어는 강체를 실제 플레이어를 번역하는 것과 반대 방향으로 움직이기 때문에 FixedUpdate에 있습니다.

+0

나는이 최대 LERP = 선형 보간을 지켜 볼 수밖에 없었습니다) –

+0

을 그래. 하나의 오브젝트를 두 지점 사이에서 부드럽게 움직이는 것을 의미합니다. 구형 운동에서와 마찬가지로 구형 운동을하는 슬레 이프가 있기 때문에 궤도 등에서도 좋은 점이 있습니다. 그러나 여기에서 사용할 수있는 것은 아닙니다 : ( – N0xus

+0

FixedUpdate()에서 메서드를 호출하는 경우 먼저 Time.fixedDeltaTime을 사용해야합니다 – DMaguireKane

답변

0

지금 당장 플레이어는 마우스 버튼을 눌렀을 때만 움직입니다. 그 이유는 코드가 작성된 방식이기 때문입니다. 마우스를 클릭 할 때마다 그리고 강체를 움직이는 경우에만 확인합니다.

마우스가 계속 눌러져 있는지 여부에 관계없이 플레이어를 움직이려면 플레이어의 상태를 저장하는 일종의 변수를 만들고 마우스 버튼을 눌러 설정하면 왼쪽으로 이동하도록 설정해야합니다 플레이어가 목표물에 도달하면 멈 춥니 다. 내가 제대로 목표를 이해하면

, 그것은 다음과 같이 보일 것입니다 :

bool moveLeft = false; 

void FixedUpdate() 
{ 

    if(Input.GetMouseButtonDown(0) 
     && (Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3)) 
    { 
     moveLeft = true; 
    } 

    if (moveLeft 
     && (position == middle)) 
    { 
     MoveLeft(); 
    } 
    else 
    { 
     moveLeft = false; 
    } 
} 

void MoveLeft() 
{ 
    var pos = rigidbody.position; 
    float xPosition = left.transform.position.x; 
    pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime); 
    rigidbody.position = pos; 
} 
+0

그 사람을 위해 고마워. 내가 원하는 건 내 플레이어가 화면의 왼쪽을 탭했을 때만 움직이는 것이다. (지금은 마우스 클릭을 사용하고있다.) 그리고 나서 명중 할 때까지 기분 좋게 움직인다. 끝점. 내가 귀하의 수표를 구현하지만, 클릭 할 때만 움직일뿐입니다. 심지어 Time.fixedDeltatime도 사용하도록 왼쪽으로 이동했습니다. – N0xus

+0

왜 멈 춥니 까? 모든 경우에 MoveLeft() 메서드를 호출해야합니다. 프레임이 moveLeft가 true 일 때 false로 설정하는 경우 –

+0

아, 이제 알았습니다. 도와 줘서 고마워. – N0xus