我正在制作像乒乓球这样的游戏,除了用户控制两个拨片并试图将球保持在一定范围内。我用触摸控制两个拨片。我分配触摸索引的方式如下:
public void checkTouchIndex() {
if (Input.touchCount <= 1)
{
touchPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
if (touchPos.x < 0)
{
Debugger.il = "Touch Index = 0";
myTouch = Input.GetTouch(0);
}
}
if (Input.touchCount >= 1)
{
touchPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position);
if (touchPos.x < 0)
{
Debugger.il = "Touch Index = 1";
myTouch = Input.GetTouch(1);
}
}
else
Debugger.il = "Side not touched";
}
以下是移动实际球拍的代码:
public void checkMovementTouch() {
if (Input.touchCount > 0)
{
//assigns touch index
checkTouchIndex();
touchPos = Camera.main.ScreenToWorldPoint(myTouch.position);
if (touchPos.x > 0)
{
//Begin Section: Touch left side
if (touchPos.y > 0)
{
//moves upwards
move(true);
}
else
{
//moves downwards
move(false);
}
//End of section
}
}
}
注意:Debugger
只是在屏幕上显示触摸的侧面和触摸的x位置的文本。但是我很难更新。您应该能够拖动手指并让桨跟随它,但经过一些测试后我发现只有一个桨正确更新以跟随手指,并且它始终是索引为1的桨。
例如,如果我触摸骑行侧,则在左侧放置另一个手指。我可以正确地向上和向下拖动左侧,但是右侧,即使我上下移动,也会保持不变。
问题:如何让两个拨片完美更新。
答案 0 :(得分:2)
我相信你应该有一个for循环遍历所有的触摸。 Here is some documentation on Input.GetTouch
void Update()
{
if (Input.touchCount > 0)
{
for (int i = 0; i < Input.touchCount; i++)
{
myTouch = Input.GetTouch(i);
// ...
}
}
}
答案 1 :(得分:1)
乔丹的回答让你在那里找到了一部分,但没有解释如何获得属于哪种划水的触摸。
目前,由于两个拨片上都有相同的代码,因此两个拨片都会分配相同的触控。
你需要一些能够在桨叶侧面进行第一次触摸的东西。
我在Jordans的回答中添加了一些伪代码,让你弄清楚确切的实现。
if (Input.touchCount > 0)
{
for (int i = 0; i < Input.touchCount; i++)
{
touchPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(i));
// if(touchPos.x is on my side)
// {
// myTouch = touchPos;
// }
}
}
最好的方法是在首次注册触摸时指定触摸,而不是在每帧上循环显示此代码。 祝你的项目好运。