【问题标题】:Unity multitouch, How to use touch.fingeridUnity 多点触控,如何使用 touch.fingerid
【发布时间】:2016-08-07 15:09:59
【问题描述】:

我正在尝试为触摸设备(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 来做我想做的事,但我不知道如何在代码中做到这一点。你能给我一个例子吗?

【问题讨论】:

    标签: c# android unity3d multi-touch


    【解决方案1】:

    你有没有注意到 touchphase.ended 在 touchphase.began 里面?

    【讨论】:

    • 感谢您回复我,不,我没有注意到 .. 但这并不能帮助我解决我的问题 :)
    • 这可能有点帮助unity3d.com/learn/tutorials/topics/mobile-touch/pinch-zoom 作为一个例子,你可以看到缩放案例的解释。在高层次上,我认为你必须重构你的代码来分析每个 gettouch(id) 分离,现在看起来你在触摸第二个动作时停止了第一个动作,因为它们都在调用同一个协程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多