Unity多点触控,如何使用touch.fingerid

时间:2016-08-07 15:09:59

标签: c# android unity3d multi-touch

我正在尝试为触摸设备(Android和IOS)构建一个简单的乒乓球游戏,这是我的第一个项目,我真的很喜欢这个东西,我需要帮助。

屏幕上会有三个按钮。第一个按钮是向上移动玩家球拍,第二个按钮是向下移动球拍,第三个按钮用于在球接触球员球拍时提高球速2秒,同时触发增强按钮。

这是我的播放器画面脚本

public class player1 : MonoBehaviour {

    float playspeed = 15f;
    float player1pos;

    Ray2D ray;
    RaycastHit2D hit;

    Rigidbody2D rb;

    Vector2 paddlepos;

    GameObject paddle1;

        void Update () 
        { 

        rb = gameObject.GetComponent <Rigidbody2D> ();

        paddlepos = transform.position;
        paddlepos.y = Mathf.Clamp ( transform.position.y , -9f , 9f );
        transform.position = paddlepos;

        if (Input.touchCount > 0 )
        {
            for ( int i = 0; i < Input.touchCount; i++)
            {  
                if ( Input.GetTouch(i).phase == TouchPhase.Began )
                {

                    Vector2 point = Camera.main.ScreenToWorldPoint (Input.GetTouch(i).position);
                    hit = Physics2D.Raycast (point , Vector2.zero, 10);


                    if ( hit.collider != null )
                    {

                    if (hit.collider.name == "up" )

                    {
                            rb.velocity = new Vector2 ( 0 , playspeed );                                
                    }

                    if (hit.collider.name == "down" )

                    {
                    rb.velocity = new Vector2 ( 0 , -playspeed);     
                    }       
                }       

                if ( Input.GetTouch(i).phase == TouchPhase.Ended )
                {
                    rb.velocity = new Vector2 (0 , 0);  
                }           
    }
   }
  }
 }  
}

对于球提升按钮,我使用以下代码

public class ball : MonoBehaviour {

    public float ballspeed = 7f;

    Ray2D ray;
    RaycastHit2D hit;

   float previousspeed;

IEnumerator ballbooster()
    {   
        previousspeed = ballspeed;

        ballspeed = ballspeed * 1.8f ;

        yield return new WaitForSeconds (2);

        ballspeed = previousspeed;

        yield break;
    } 

void Update ()

    {
        if (Input.touchCount > 0 )
        {
            for ( int i = 0; i < Input.touchCount; i++)
            {  
                if ( Input.GetTouch(i).phase == TouchPhase.Began )
                {

                    Vector2 point = Camera.main.ScreenToWorldPoint (Input.GetTouch(i).position);
                    hit = Physics2D.Raycast (point , Vector2.zero, 10);

                    if ( hit.collider != null )
                    {
                        if (hit.collider.name == "boost" && distance < 5)
                        {
                            StartCoroutine (ballbooster());
                        }   
                    }

     }
    }
   }
  }
 }
}

我的问题是我无法使用多点触控,例如当我触摸向上按钮然后按下提升按钮时,拨片停止移动。现在我正在尝试处理多点触控。我知道我必须使用touch.fingerid来做我想做的事,但我不知道如何在代码中做到这一点。你能给我举个例子吗?

1 个答案:

答案 0 :(得分:0)

您是否注意到touchphase.ended位于touchphase.began内?