2016-04-22 88 views
-1

我正在開發2D遊戲,現在我已經結束了! (幸福)。但我無法讓它在android中移動。下面的代碼有什麼問題?玩家移動觸摸輸入

當我運行團結控制檯應用程序沒有指責任何錯誤。

using UnityEngine; 
    using System.Collections; 

    public class Bee : MonoBehaviour { 

     public float velocity; 

     public Transform bee; 
     private Animator animator; 

     public bool isGrounded = true; 
     public float force; 

     public float jumpTime = 0.4f; 
     public float jumpDelay = 0.4f; 
     public bool jumped = false; 
     public Transform ground; 

     private Gerenciador gerenciador; 

     // Use this for initialization 
     void Start() 
     { 
      gerenciador = FindObjectOfType (typeof(Gerenciador)) as Gerenciador; 
      animator = bee.GetComponent<Animator>(); 
      gerenciador.StartGame(); 

     } 

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

      Move(); 

     } 



     void Move() 
     { 

      isGrounded = Physics2D.Linecast (bee.transform.position, ground.position, 1 << LayerMask.NameToLayer ("Floor")); 

      foreach (UnityEngine.Touch touch in Input.touches) { 

       if (this.GetComponent<GUITexture>().HitTest (touch.position)) { 

        if (touch.phase != TouchPhase.Ended) { 

         if (this.name == "Right") { 

          animator.SetBool ("Run", true); 
          bee.transform.Translate (Vector2.right * velocity* Time.deltaTime); 
          bee.transform.eulerAngles = new Vector2 (0, 0); 
         } 

         if (this.name == "Left") { 

          animator.SetBool ("Run", true); 
          bee.transform.Translate (Vector2.right * velocity* Time.deltaTime); 
          bee.transform.eulerAngles = new Vector2 (0, 180); 
         } 

         if (this.name == "Up" && isGrounded && !jumped) { 

          animator.SetTrigger ("JumpB"); 
          bee.GetComponent<Rigidbody2D>().AddForce (transform.up * force); 
          jumpTime = jumpDelay; 
          jumped = true; 
         } 
        } 

        if (touch.phase == TouchPhase.Ended) { 
         animator.SetBool ("Run", false); 


        } 
       } 
      } 


      if (jumpTime >= 0f) { 
       jumpTime -= Time.deltaTime; 
      } 

      if (jumpTime <= 0 && isGrounded && jumped) { 

       animator.SetTrigger ("groundB"); 
       jumped = false; 
      } 
     } 
+3

嘗試調試代碼使用Unity Remote,您可以在Google Play上找到它。這個應用程序允許您在Unity編輯器中調試觸摸。 –

+1

只是次要的東西,如果你有沒有想過移植這對PC,你的運動鎖定到您的幀速率是一個壞主意! – Draken

+0

@Draken如果爲Android =] –

回答

0

我猜你的代碼保持調用運動的一部分,它攪亂代碼,因爲你沒有檢查它是否是touchPhase的開始。

因此,當用戶觸摸該按鈕時,Move方法被稱爲用於每個幀並且因爲touchPhase尚未結束(播放器仍然觸摸),它通過此線if (touch.phase != TouchPhase.Ended)

這意味着,這部分是讓呼籲所有幀,而玩家依舊是觸及GUItexture,我認爲你應該做運動,如果touchPhase已經開始:

if (touch.phase == TouchPhase.Began) { 
    if (this.name == "Right") { 
     animator.SetBool ("Run", true); 
     bee.transform.Translate (Vector2.right * velocity* Time.deltaTime); 
     bee.transform.eulerAngles = new Vector2 (0, 0); 
    } 
    if (this.name == "Left") { 
     animator.SetBool ("Run", true); 
     bee.transform.Translate (Vector2.right * velocity* Time.deltaTime); 
     bee.transform.eulerAngles = new Vector2 (0, 180); 
    } 
    if (this.name == "Up" && isGrounded && !jumped) { 
     animator.SetTrigger ("JumpB"); 
     bee.GetComponent<Rigidbody2D>().AddForce (transform.up * force); 
     jumpTime = jumpDelay; 
     jumped = true; 
    } 
}