使用mathf.clamp作为不同大小屏幕的边界

时间:2016-12-26 18:57:02

标签: c# unity3d unity5

我目前有一个名为“block”的游戏对象,两个长立方体彼此相邻,两者之间有间隙。现在,当用户触摸屏幕并向左或向右拖动时,该块也会向该方向移动。现在我正在尝试设置边界,以便它们可以向左或向右方向上移动一定量。但是我怎么能这样编码所以它对于不同的屏幕是相同的,例如iphone ipad等。

我目前使用的代码使得块彼此重叠,摆脱了需要存在的差距。我该如何解决这个问题。代码如下:

 public float speed = 0.0F;
 void Update() {
    if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) {
        // Get movement of the finger since last frame
        Vector3 touchDeltaPosition = Input.GetTouch(0).deltaPosition;

        // Move object across XY plane
        transform.Translate(touchDeltaPosition.x * speed, 0, 0);

        Vector3 boundaryVector = transform.position;   
        boundaryVector.x = Mathf.Clamp (boundaryVector.x, -1f, 1f);
        transform.position = boundaryVector;
    }
}

blocks in unity

1 个答案:

答案 0 :(得分:1)

对于屏幕尺寸问题,我建议您在背景中放置一些Image Ui,然后根据不同的分辨率设置它使用anchor属性和。

使高宽比0.5,将UI比例设置为屏幕尺寸......所有这些仅在Inspector。 从Transform获取左右边界值,然后在block gameobj脚本中使用它,如下所示:

//windows specific code

            float x=Input.GetAxis ("Horizontal");
            if (x == 0) {
                Stop ();
            } else if (x > 0) {
                MoveRight ();
            } else if (x < 0) {
                MoveLeft ();
            }
            pos = transform.position;      //left                   //right
            pos.x=Mathf.Clamp (pos.x, "your boundry min to", "Your boundry max");
            transform.position = pos;

对于重叠问题,你可以利用Block中的父/子属性。使另一个孩子成为另一个......这样如果你向左移动,右边的块也将向左移动,它们不会重叠.... / p>