我正在尝试为触摸设备(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来做我想做的事,但我不知道如何在代码中做到这一点。你能给我举个例子吗?
答案 0 :(得分:0)
您是否注意到touchphase.ended位于touchphase.began内?