2016-09-30 7 views
0

현재 일부 플레이어의 움직임을 연구 중입니다. 내 플레이어의 주요 아이디어는 대각선이 아닌 가로 및 세로 만 움직입니다. 이 문제에 대한 합리적인 해결책을 찾지 못했습니다. 나는 지금 rigidbody 또는 character.controller를 사용하고 싶지 않다. 다른 목표는 여러 방향 키를 누를 때 플레이어가 마지막으로 누른 방향으로 직접 이동하기를 원합니다. 여기 내 코드는 다음과 같습니다.대각선 이동없이 마지막으로 누른 방향으로 이동

using UnityEngine; 
using System.Collections; 


public class controller : MonoBehaviour { 
    public int movementspeed; 
    // Use this for initialization 
    void Start() { 

    } 

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


     if (Input.GetKey (KeyCode.A)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,270,0); 
      //move 
      transform.Translate (transform.right * movementspeed * Time.deltaTime); 

     } 
     else if(Input.GetKey (KeyCode.D)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,90,0); 
      //move 
      transform.Translate (transform.right *(-1)* movementspeed * Time.deltaTime); 


     } 
     else if(Input.GetKey (KeyCode.S)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,180,0); 
      //move 
      transform.Translate (transform.forward * (-1) * movementspeed * Time.deltaTime); 
     } 
     else if (Input.GetKey (KeyCode.W)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,0,0); 
      //move 
      transform.Translate (transform.forward * movementspeed * Time.deltaTime); 

     } 
     else if (Input.GetKey (KeyCode.A)) { 
      //ratation 
      transform.localEulerAngles = new Vector3(0,270,0); 
      //move 
      transform.Translate (transform.right * movementspeed * Time.deltaTime); 

     } 
    } 
} 

답변

2

선택 진술의 구조는이 기능을 제공하지 않습니다. 첫 번째를 검사 할 것이므로 false이면 다음과 같은 경우를 검사합니다. 따라서 제가 A를 누르고 있으면 내가 언론에 관계없이 항상 코드의 A 부분에만 도달 할 것입니다.

내가 당신이라면 어떻게해야할까요?이 위에 다른 레이어를 추가하는 것입니다. 키 다운 이벤트 만 감지하고 일치하는 변수를 설정하십시오. 이것을 설정할 때 다른 것들을 비활성화하십시오. 그런 다음이 변수를 사용하여 이동하십시오. 이와 같이 :

bool left, right, up, down; 
void CheckInput() { 
    if (Input.GetKeyDown(KeyCode.W) { 
     up = true; 
     left = right = down = false; 
    } 
    if (Input.GetKeyDown(KeyCode.S) { 
     down = true; 
     left = right = up = false; 
    } 
    if (Input.GetKeyDown(KeyCode.A) { 
     left = true; 
     right = up = down = false; 
    } 
    if (Input.GetKeyDown(KeyCode.D) { 
     right= true; 
     left= up = down = false; 
    } 
    //And then do matching OnKeyUp events to set them false 
} 

void Update() { 
    CheckInput(); 
    if (left) 
     //Move left 
    if (right) 
     //Move right 
    //etc. 
} 
+0

답을 알려 주셔서 감사합니다. 일부 작업을 마친 후 운동 스크립트를 만드는 것이 좋지 않습니다. 나는 작품을 바꿨다. 지금 나는 캐릭터 콘트롤러를 사용하고있다. – umuur

+0

문제 없습니다. 어느 시점에서 나 자신의 캐릭터 컨트롤러를 만들 것을 권장 할 수 있습니다. 그것은 연습에 좋으며 원하는대로 얻을 수 있습니다. – Martin