Ограничьте пространство касания до половины экрана - PullRequest
0 голосов
/ 28 мая 2020

Как ограничить пространство касания правой стороной экрана, чтобы регистрировались только касания правой стороны. С левой стороны касания ничего не произойдет. Как я могу сделать это с помощью этого скрипта? Пробовал последние 2 дня, все еще ничего не могу понять. Есть ли специалисты, которые могут мне помочь?

public class look2 : MonoBehaviour
{
private Vector3 firstpoint; //change type on Vector3
private Vector3 secondpoint;
private float xAngle = 0.0f; //angle for axes x for rotation
private float yAngle = 0.0f;
private float xAngTemp = 0.0f; //temp variable for angle
private float yAngTemp = 0.0f;
public GameObject character;
void Start()
  {
    //Initialization our angles of camera
    xAngle = 0.0f;
    yAngle = 0.0f;
    this.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
    character.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
}
void Update()
{
    //Check count touches
    if (Input.touchCount > 0)
    {
        //Touch began, save position
        if (Input.GetTouch(0).phase == TouchPhase.Began)
        {
            firstpoint = Input.GetTouch(0).position;
            xAngTemp = xAngle;
            yAngTemp = yAngle;
        }
        //Move finger by screen

            if (Input.GetTouch(0).phase == TouchPhase.Moved)
            {
                secondpoint = Input.GetTouch(0).position;
                //Mainly, about rotate camera. For example, for Screen.width rotate on 180 degree
                xAngle = xAngTemp + (secondpoint.x - firstpoint.x) * 180.0f / Screen.width;
                yAngle = yAngTemp - (secondpoint.y - firstpoint.y) * 90.0f / Screen.height;
                //Rotate camera
                this.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
            character.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
          }
        }
    }
 }

1 Ответ

2 голосов
/ 28 мая 2020

Вы можете использовать Screen.width, чтобы получить именно это: Ширина экрана устройства в пикселях.

Поскольку Touch.position также находится в пространстве пикселей экрана, правая половина экрана так же проста, как и любое касание с

touch.position.x > Screen.width / 2f

, вы также можете использовать >= в зависимости от того, хотите ли вы на один пиксель больше или меньше;)

А затем вы можете просто отфильтровать штрихи по этому условию перед доступом к ним, например, используя Linq Where

var validTouches = Input.touches.Where(touch => touch.position.x > Screen.width / 2f).ToArray();

Это в основном сокращение от выполнения чего-то вроде

var touches = new List<Touch>();
foreach(var touch in Input.touches)
{
    if(touch.position.x > Screen.width / 2f)
    {
        touches.Add(touch);
    }
}
var validTouches = touches.ToArray();

Таким образом, ваш код может выглядеть как

using System.Linq;

...

void Update()
{
    //Check count touches
    if (Input.touchCount > 0)
    {
        // Now collect only touches being on the left half of the screen
        var validTouches = Input.touches.Where(touch => touch.position.x > Screen.width / 2f).ToArray();

        if(validTouches.Length > 0)
        {
            var firstTouch = validTouches[0];

            // Better use switch here
            switch(firstTouch.phase)
            {
                case TouchPhase.Began:   
                    firstpoint = firstTouch.position;
                    xAngTemp = xAngle;
                    yAngTemp = yAngle;
                    break;

                case TouchPhase.Moved:
                    secondpoint = firstTouch.position;
                    //Mainly, about rotate camera. For example, for Screen.width rotate on 180 degree
                    xAngle = xAngTemp + (secondpoint.x - firstpoint.x) * 180.0f / Screen.width;
                    yAngle = yAngTemp - (secondpoint.y - firstpoint.y) * 90.0f / Screen.height;
                    //Rotate camera
                    this.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
                    character.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0f);
                    break;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...