触摸阶段行为问题
touch phases behavior issue
我正在 Unity3D 中为触摸屏设备制作 2D 游戏,我正在尝试制作类似 "GetMouseButtonDown" 的游戏。这是我的代码:
if (Input.touchCount > 0) {
foreach (Touch touch in Input.touches) {
Vector3 i = Camera.main.ScreenToWorldPoint (touch.position);
RaycastHit2D hit = Physics2D.Raycast (i, i);
if (hit.transform != null) {
string tag = hit.transform.gameObject.tag;
if (touch.phase == TouchPhase.Began) {
hit.transform.localScale = new Vector2(-transform.localScale.x, -transform.localScale.y);
}
}
}
}
我想让被击中的物体改变比例。我希望它像我使用 "GetMouseButtonDown" 时那样。然而,结果,我按下它,它的比例发生了变化,但只有一次。我再次按下,没有任何反应。我应该怎么办?
问题与触摸阶段行为无关,您实施得很好。
问题是您每次触摸游戏对象时都将其设置为相同的比例。为了完善您的游戏对象,您必须像这样设置 hit.transform.localScale
:
hit.transform.localScale = new Vector2(-hit.transform.localScale.x, -hit.transform.localScale.y)
请注意,您每次触摸游戏对象时都将 x 和 y 比例设置为 transform.localScale
,这是一个常数值。
另请注意,在这句话中,您每次触摸游戏对象时只是在翻转刻度。如果你想迭代地缩放你的游戏对象,让它变得更小,你必须这样做:
float scaleFactor = -0.2f;
hit.transform.localScale += new Vector2(hit.transform.localScale.x*scaleFactor, hit.transform.localScale.y*scaleFactor);
我正在 Unity3D 中为触摸屏设备制作 2D 游戏,我正在尝试制作类似 "GetMouseButtonDown" 的游戏。这是我的代码:
if (Input.touchCount > 0) {
foreach (Touch touch in Input.touches) {
Vector3 i = Camera.main.ScreenToWorldPoint (touch.position);
RaycastHit2D hit = Physics2D.Raycast (i, i);
if (hit.transform != null) {
string tag = hit.transform.gameObject.tag;
if (touch.phase == TouchPhase.Began) {
hit.transform.localScale = new Vector2(-transform.localScale.x, -transform.localScale.y);
}
}
}
}
我想让被击中的物体改变比例。我希望它像我使用 "GetMouseButtonDown" 时那样。然而,结果,我按下它,它的比例发生了变化,但只有一次。我再次按下,没有任何反应。我应该怎么办?
问题与触摸阶段行为无关,您实施得很好。
问题是您每次触摸游戏对象时都将其设置为相同的比例。为了完善您的游戏对象,您必须像这样设置 hit.transform.localScale
:
hit.transform.localScale = new Vector2(-hit.transform.localScale.x, -hit.transform.localScale.y)
请注意,您每次触摸游戏对象时都将 x 和 y 比例设置为 transform.localScale
,这是一个常数值。
另请注意,在这句话中,您每次触摸游戏对象时只是在翻转刻度。如果你想迭代地缩放你的游戏对象,让它变得更小,你必须这样做:
float scaleFactor = -0.2f;
hit.transform.localScale += new Vector2(hit.transform.localScale.x*scaleFactor, hit.transform.localScale.y*scaleFactor);