1

私はUnityが初めてです。私は車のチュートリアルに従い、それを Android に移植しようとしています。どうにかして車をデバイスに移動できました。問題は、クリックして車を加速する 3D テキストを使用していることです。私がしたことは

3D テキストを作成しました。ボックスコライダーを追加しました。Box Collider の is Trigger オプションをチェックします。以下のスクリプトを追加しました。

 public var Mainref:TouchPlaneScript;

 function FixedUpdate() 
 {

  var touch: Touch = Input.touches[0];

  if(touch.phase == TouchPhase.Began)
  {
     Mainref.applyBrake = true;
  }
  if(touch.phase == TouchPhase.Ended)
  {
     Mainref.applyBrake = false;
  }

}

  function Start () 
  { 
  // Find the OtherScript which is attached to any game object in the scene. 
     Mainref = FindObjectOfType(TouchPlaneScript);
  }

  function OnMouseUp()
  {
    Mainref.applyBrake = false;
    Debug.Log("Stop Brake");
  }
  function OnMouseDown()
  {
    Mainref.applyBrake = true;
    Debug.Log("Apply Brake");
  }

タッチ メソッド内のロジックが間違っている可能性がありますが、心配する必要はありません。デバイスで実行中のマウス機能のコードにもコメントしました。しかし、問題は同じままです。

問題は、テキストをクリックした場合にのみタッチ関数を呼び出したい場合に、画面に触れた場合にタッチメソッドが呼び出されることです。

シーンには 4 つのボタンがあることに注意してください。左、右、ブレーキ、アクセルはすべて 3D テキストであり、同じ構造と同じ問題があります。

4

2 に答える 2

5

コードは入力タッチをチェックしてクリック イベントを検出しましたが、ターゲットの位置をチェックしていないため、画面をクリックするとすべてが発生します。正しい操作を行っていることを確認するには、タッチの位置を確認する必要があります。以下のコード (JS に慣れていないため、これは C# バージョンです。自分で翻訳する必要があります):

void FixedUpdate ()
{
    if ( Application.platform == RuntimePlatform.IPhonePlayer ||
        Application.platform == RuntimePlatform.Android )
    {
        if ( Input.touchCount <= 0 )
            return;

        // detect single touch only
        Touch touch  = Input.touches[0];

        if ( touch.phase == TouchPhase.Began )
        {
            Debug.Log( 123 );
            OnTouchBegan( touch.position );
        }
    }
    else
    {
        if ( Input.GetMouseButtonDown( 0 ) )
        {
            Debug.Log(Input.mousePosition);
            OnTouchBegan( Input.mousePosition );
        }
    }
}

    void OnTouchBegan (Vector2 screenPos)
    {
        Ray ray = Camera.main.ScreenPointToRay( screenPos );
        RaycastHit hit;

        if ( Physics.Raycast( ray, out hit ) )
        {
            hit.collider.gameObject.SendMessage("OnClick", SendMessageOptions.DontRequireReceiver);
        }
    }

この後、メソッド OnClick() を実装する新しいスクリプトを作成し、それを 3D テキスト ゲーム オブジェクトにアタッチする必要があります。次に、3D テキストをクリックすると、OnClick メッセージを受け取ります。

お役に立てれば。

ちなみに、シーンに複数のカメラがある場合は、Camera.main を 3D テキストを見るカメラに変更する必要があります。

于 2013-05-09T08:23:14.583 に答える
0

Unity で Raycast を見て、3D テキストが適切に処理されていることを確認してください。

「モバイル入力」セクションでドキュメントを確認できます。

于 2013-05-08T07:05:09.320 に答える