Как преобразовать элементы управления клавиатуры на сенсорный экран в Unity - PullRequest
0 голосов
/ 14 февраля 2019

Полный новичок здесь.Использование Unity C #.Я смотрю на перевод моей игры PONG с клавиатуры на сенсорный экранВот мой рабочий код клавиатуры:

// Player 1 => Управляет левой битой с помощью клавиш W / S

public GameObject leftBat;

// Используйте это для инициализации voidStart () {

}

// Обновление вызывается один раз для каждого кадра void Update () {

//Defualt speed of the bat to zero on every frame
leftBat.GetComponent<Rigidbody>().velocity = new Vector3(0f, 0f, 0f);

//If the player is pressing the W key...
if (Input.GetKey (KeyCode.W)) {

    //Set the velocity to go up 1
    leftBat.GetComponent<Rigidbody>().velocity = new Vector3(0f, 8f, 0f);
}

//If the player is pressing the S key...
else if (Input.GetKey (KeyCode.S)) {

    //Set the velocity to go down 1 (up -1)
    leftBat.GetComponent<Rigidbody>().velocity = new Vector3(0f, -8f, 0f);


}

}

Я нашел этот коди играл с ним, но теперь безуспешно.

с использованием UnityEngine;using System.Collections;

открытый класс Player_Input_Controller: MonoBehaviour {

public GameObject leftBat;
public float paddleSpeed = 1f;
public float yU;
public float yD;

private Ray ray;
private RaycastHit rayCastHit;

private Vector3 playerPos = new Vector3(0, -9.5f, 0);

// Update is called once per frame
void Update () {

    if (Input.GetMouseButton (0))
    {
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if(Physics.Raycast(ray, out rayCastHit)){
            Vector3 position = rayCastHit.point;

            float yPos = position.y;
            playerPos = new Vector3(Mathf.Clamp(yPos, yU, yD), -9.5f, 0f);
            transform.position = playerPos; 
        }
    }
}

}

У любого есть сценарий Pong с сенсорным экраном, который я могу использовать, или знаю, как его редактироватьодин?

Опять же, я действительно новичок, и мне жаль, если я выгляжу как Манекен в классе.

Спасибо за предоставленную помощь.Я очень ценю это.Это последнее препятствие в завершении моей игры.

1 Ответ

0 голосов
/ 14 февраля 2019

На мой взгляд, вам не нужно никакого радиовещания.Потому что вы работаете в 2D и вас беспокоит только значение y Input.mousePosition.Таким образом, вы можете рассчитать размер экрана, используя значение z вашей камеры.Если ваша камера на (0, 0, -10), скажем, ваши экстенты в игре будут от -5 - BatOffset до 5+BatOffset в ваших мировых координатах.Следовательно, вам как-то нужна функция для сопоставления Screen.height с вашими экстентами мировых координат, как вы можете видеть на изображении.

enter image description here

В заключение вам нужно найти Input.mousePosition.y, разделите его на Screen.height.Это даст вам соотношение, где вы касаетесь или нажимаете.Тогда найдите свою позицию в мировом пространстве.

Обратите внимание, что: вы также можете использовать Input.touchPosition.y.Следующий скрипт поможет вам выполнить эту операцию:

public GameObject cam;
private Vector3 batPos;
private float minY;
private float maxY;
private int Res;
private float deltaY;

void Start () {
    minY = cam.transform.position.z / 2 - gameObject.transform.localScale.y;
    maxY = (-cam.transform.position.z / 2) + gameObject.transform.localScale.y;
    deltaY = maxY - minY;
    Debug.Log(minY + " " + maxY + " " + deltaY);
    Res = Screen.height;

    batPos = gameObject.transform.position;

}

void Update () {
    if(Input.GetMouseButtonDown(0))
    {
        // we find the height we have to go up from minY
        batPos.y =minY + Input.mousePosition.y / Res * deltaY;
        gameObject.transform.position = batPos;
    }       
}

Это работает для меня в редакторе, когда вы щелкаете мышью по экрану.Вам просто нужно изменить команды частей Input.GetMouseButtonDown на Touch, такие как Touch.tapCount > 0.Также этот скрипт должен быть прикреплен к летучей мыши.Удачи!

Также Вы можете использовать Ортографическую камеру и Ортографическую камеру размером вместо cam.transformation.z

...