Изменение элементов управления игрой для устройства Android с помощью C# в unity2D

У меня есть игра в стиле прорыва, созданная для Интернета, в которой используется мышь для перемещения весла влево и вправо, а при нажатии мяч запускается. я пытаюсь добиться того, чтобы это работало на моем устройстве Android с правильными элементами управления, так как на данный момент при тестировании оно вообще не работает, так как в тот момент, когда я касаюсь экрана на телефоне, мяч запускается, а элементы управления веслом двигаются странно ! вот сценарии для весла и мяча, если кто-то может помочь или указать мне правильно, я буду очень признателен, поскольку только что нашел свои ноги в единстве.

public class Paddle : MonoBehaviour {

    private Ball ball;

    void Start(){
        ball = GameObject.FindObjectOfType<Ball> ();
    }

    void Update () {
            MoveWithMouse ();
    }

    void MoveWithMouse(){
        Vector3 paddlePos = new Vector3 (4.7f, this.transform.position.y, 0f);
        float mousePosInBlocks = Input.mousePosition.x / Screen.width * 16;
        paddlePos.x = Mathf.Clamp (mousePosInBlocks, 4.7f, 11.3f);
        this.transform.position = paddlePos;
    }

}

public class Ball : MonoBehaviour {

    private Paddle paddle;

    private bool hasStarted = false;

    private Vector3 paddleToBallVector;

    void Start () {
        paddle = GameObject.FindObjectOfType<Paddle> ();
        paddleToBallVector = this.transform.position - paddle.transform.position;
    }

    // Update is called once per frame
    void Update () {
        if (!hasStarted) {
            //lock ball relative to the paddle
            this.transform.position = paddle.transform.position + paddleToBallVector;
            //wait for mouse press to start
            if (Input.GetMouseButtonDown (0)) {
                hasStarted = true;
                this.GetComponent<Rigidbody2D> ().velocity = new Vector2 (2f, 10f);
            }
        }
    }

    void OnCollisionEnter2D(Collision2D collision){

        Vector2 tweak = new Vector2 (Random.Range(0f,0.2f),Random.Range(0f,0.2f));

        if (hasStarted) {
            GetComponent<AudioSource> ().Play ();
            GetComponent<Rigidbody2D>().velocity += tweak;
        }
    }
}

person David Marsh    schedule 16.08.2017    source источник


Ответы (1)


Причина, по которой мяч запускается, заключается в том, что Input.GetMouseButtonDown(0) также возвращает значение true при касании экрана на мобильном устройстве. Чтобы противодействовать этому, вы можете использовать элементы управления, характерные для мобильных устройств. Если вы хотите отпустить мяч, например, когда палец поднят... вы можете сделать:

if (Input.GetTouch(0).phase == TouchPhase.Ended)

Для перемещения весла с положением пальца вы можете поместить что-то вроде этого в свой метод обновления:

if (Input.TouchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
    Touch touch = Input.GetTouch(0);
    paddlePos = new Vector3(touch.position.x, transform.position.y, transform.position.z);
    transform.position = paddlePos;
}
person ryeMoss    schedule 16.08.2017