2016-07-25 9 views
1

私は現在サッカーの試合をしています。ゲームオブジェクトのタップ検出が1つになっています

このミニゲームでは、プレイヤーがボールに触れると力が加わり、目標は高いスコアになります。

だから私はこう書いています。これにより

void Update() 
{ 
    if(Input.touchCount == 1 && Input.GetTouch(0).phase== TouchPhase.Began) 
     { 
     AddForce, and playsound ect... 
     } 

} 

を、私は、画面上の任意の場所にタッチすると、それは力が追加されますが、私はちょうど私が私のゲームオブジェクト(ボール)に触れたときに力を追加します。

どうすればいいですか?

ありがとうございます! :)

+0

サッカーボール2Dスプライト/画像または3Dメッシュのですか? – Programmer

+0

これは3Dメッシュで、ゲームはFacebookのメッセンジャーでサッカーのミニゲームのように見えます。 –

答えて

1

スクリプトでOnMouseDown()を使用してください。ここに例があります:

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    void OnMouseDown() { 
     Application.LoadLevel("SomeLevel"); 
    } 
} 

P.S:上記のコードをUpdate()メソッドから削除します。


EDIT:モバイルデバイス

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

public class OnTouchDown : MonoBehaviour 
{ 
    void Update() { 
     // Code for OnMouseDown in the iPhone. Unquote to test. 
     RaycastHit hit = new RaycastHit(); 
     for (int i = 0; i < Input.touchCount; ++i) { 
      if (Input.GetTouch(i).phase.Equals(TouchPhase.Began)) { 
      // Construct a ray from the current touch coordinates 
      Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position); 
      if (Physics.Raycast(ray, out hit)) { 
       hit.transform.gameObject.SendMessage("OnMouseDown"); 
       } 
      } 
     } 
    } 
} 

ため代替コードは、シーン内の任意の活性gameObjectに上記のスクリプトを取り付け、OnMouseDown()は同様に、モバイルデバイスのために動作します。

+0

タッチデバイスで動作しているので、mouseDownが動作しないとは思わない。 –

+1

@Ophéliaこのスクリプトをシーンに追加すると、いつものように 'OnMouseDown()'で作業できるようになりました。あなたの 'OnMouseDown()'メソッドを 'public'にしてください。 –

+0

私はvoid OnMouseDown()を使用し、アンドロイドデバイスで動作します。ありがとうたくさんの人:)(とspecialy Umair M.);) –

2

これで、画面のどこでも触れると力が加えられますが、 は私のgameobject(ボール)に触れると力を加えたいだけです。

特定のゲームオブジェクトにタップを検出するには、そのサッカーボールをクリックして検出するRaycastを使用する必要があります。コライダー(例:Sphere Collider)が接続されていることを確認してください。

void Update() 
{ 
    if ((Input.touchCount > 0) && (Input.GetTouch(0).phase == TouchPhase.Began)) 
    { 
     Ray raycast = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); 
     RaycastHit raycastHit; 
     if (Physics.Raycast(raycast, out raycastHit)) 
     { 
      Debug.Log("Something Hit"); 
      if (raycastHit.collider.name == "Soccer") 
      { 
       Debug.Log("Soccer Ball clicked"); 
      } 

      //OR with Tag 

      if (raycastHit.collider.CompareTag("SoccerTag")) 
      { 
       Debug.Log("Soccer Ball clicked"); 
      } 
     } 
    } 
} 
+0

それはアンドロイドで動作しますか?私はタッチスクリーンで作業するからです。 –

+1

はい。コメントする前にコードを試してください。 – Programmer

+0

私はちょうどメソッドvoid OnMouseDownを使用し、それは私のアンドロイドデバイス(ユニティのリモートではない)で動作します。 –

0

あなたはボールが

  • をタッチした場合、あなたはの時間に電源をインクリメントする必要があるかを決定するためにタッチをレイキャストする必要があり、ここで

    1. をいくつかの項目を実行する必要がありtouch

    2. あなたはボールを発射し、タッチのリリース時に電源をリセットする必要があります


    コード例hereは、レイキャスト

    hereはパート2

    3のお手伝いをする必要があるコードは素晴らしく、あなたは自分の起動コードのANをトリガーする必要が簡単ですを処理する方法を示しています

    それらを一緒に入れて、あなたがこの

    のようなものを取得しますが終了した上でリセット

    注:コードは唯一それがテストされていない例のためのものであり、完全なものではありません

    これはあなたの代わりに、オブジェクトに直接リンクすることができますトリガとして、物理学のアップデートを使用して、他の回答の一部により示唆されるようにトリガー

  • +1

    fixedUpdateを使用しない – Fattie

    +0

    私はUnityにはかなり新しいと思うので、私は仕事と何がベストかを判断するのに十分高いレベルではないが、ユニティチーム独自の例では、ユーザーを管理するための主要なプロセス例えばhttps:// unity3dと入力します。プレイリスト= 17144 – MikeT

    +0

    残念なことに(多くの)Unityのドキュメンテーションは完全で完全なものですが、 – Fattie

    関連する問題