2017-06-21 30 views
0

私はUnityを初めて使い、Captain Blaster 2Dゲームを作成する方法についてのチュートリアルに従っていますが、Androidに変換したいのですが、ドラッグすることでプレーヤーを制御可能にしたい1本の指で画面上と私のコードが悪いのか理解していない、何も私はどうなるのか、感謝AndroidドラッグスプライトコードUnity 5

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.SceneManagement; 

public class ShipControl : MonoBehaviour { 

    public float playerSpeed = 10f; 
    public GameControl gameController; 
    public GameObject bulletPrefab; 
    public float reloadTime = 1f; 

    private float elapsedTime = 0; 


    void Update() 
    { 

     elapsedTime += Time.deltaTime; 
     if (Input.touchCount >= 1) 
     { 
      foreach (Touch touch in Input.touches) 
      { 
       Ray ray = Camera.main.ScreenPointToRay (touch.position); 
       RaycastHit hit; 
       if (Physics.Raycast (ray, out hit, 100)) { 

       } 
      } 

     if (elapsedTime > reloadTime) 
     { 
      Vector3 spawnPos = transform.position; 
      spawnPos += new Vector3 (0, 1.2f, 0); 
      Instantiate (bulletPrefab, spawnPos, Quaternion.identity); 

       elapsedTime = 0f; 
     } 
     } 
    } 
    void OnTriggerEnter2D(Collider2D other) 
    { 
     gameController.PlayerDied(); 
    } 

} 
+0

まあ、指があったと判断したコードの部分を、実際、何かに触れるのは空です... – Draco18s

答えて

1

を支援する「ドラッグ」と呼ばれるブール値を追加し、レイキャストはまた、あなたは何を打つかどうかをチェックした後でヒットしたオブジェクトがプレーヤーのGameObjectかどうかをチェックします。 ユーザーがタッチを離していない限り、プレーヤーの剛体をタッチ位置に向かって移動させます(したがって、障害物があれば、それらの間を右に移動しません)。

コードは、おそらく(プレイヤーがタッチをリリースし、falseにブール値をドラッグした場合、あなたはまた、チェックするためにいくつかのタイマーを追加する必要があります)、次のようになります。

public float playerSpeed = 10f; 
public GameControl gameController; 
public GameObject bulletPrefab; 
public float reloadTime = 1f; 

private float elapsedTime = 0; 

private bool dragging = false; 


void Update() 
{ 

    if (Input.touchCount >= 1) 
    { 
     foreach (Touch touch in Input.touches) 
     { 
      Ray ray = Camera.main.ScreenPointToRay (touch.position); 
      RaycastHit hit; 

      if (Physics.Raycast (ray, out hit, 100)) 
      { 
       if(hit.collider.tag == "Player") // check if hit collider has Player tag 
       { 
        dragging = true; 
       } 
      } 

      if(dragging) 
      { 
       //First rotate the player towards the touch (should do some checks if it's not too close so it doesn't glitch out) 
       Vector3 _dir = Camera.main.ScreenToWorldPoint(touch.position) - transform.position; 
       _dir.Normalize(); 

       float _rotZ = Mathf.Atan2(_dir.y, _dir.x) * Mathf.Rad2Deg; 
       transform.rotation = Quaternion.Euler(0f, 0f, _rotZ - 90); 

       //Move towards the touch 
       transform.GetComponent<Rigidbody>().AddRelativeForce(direction.normalized * playerSpeed, ForceMode.Force); 
      } 
     } 
    } 
} 
関連する問題