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

Я использую Unity и C # для создания игры. Следующий код позволяет игроку перемещаться влево и вправо с помощью клавиш со стрелками на компьютере, но он мне нужен для работы на устройстве Andriod. Есть ли простой способ использовать этот код, чтобы позволить игре работать на устройстве Andriod с помощью сенсорного управления и без переписывания всего кода?

void Start()
{
    myRigidbody = GetComponent<Rigidbody2D>();
    myAnim = GetComponent<Animator>();
}

// Update is called once per frame
void Update()
{
    isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);

    if (Input.GetAxisRaw("Horizontal") > 0f)
    {
        myRigidbody.velocity = new Vector3(moveSpeed, 
        myRigidbody.velocity.y, 0);
    }
    else if (Input.GetAxisRaw("Horizontal") < 0f)
    {
        myRigidbody.velocity = new Vector3(-moveSpeed, 
        myRigidbody.velocity.y, 0f);
    }
    else
    {
        myRigidbody.velocity = new Vector3(0f, myRigidbody.velocity.y,0f);
    }

    if (Input.GetButtonDown("Jump") && isGrounded)
    {
        myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, jumpSpeed, 0f);
    }

    myAnim.SetFloat("Speed", Mathf.Abs(myRigidbody.velocity.x));
    myAnim.SetBool("Grounded", isGrounded);
    }
}

1 Ответ

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

Попробуй это. Три переменные (leftBtn, rightBtn и jump) будут сработать соответственно:

  1. если коснуться правой нижней части экрана, rightBtn = true
  2. если коснуться нижней левой части экрана, leftBtn = true
  3. если коснуться верхней части экрана в любом месте, переход = true

-

bool leftBtn = false;
bool rightBtn = false;
bool jump = false;

void Update()
{
    leftBtn = false;
    rightBtn = false;
    jump = false;
    if(Input.touches.Length > 0){
        Touch touch = Input.touches [0];
        if (touch.position.y > Screen.height / 2) {
            jump = true;
        } else {
            if (touch.position.x > Screen.width / 2) {
                rightBtn = true;
            } else {
                leftBtn = true;
            }
        }
    }

    //put the rest Of your code here \/
}

Так что я думаю, что это будет выглядеть в вашем коде (но я могу ошибаться и ошибаться):

bool leftBtn = false;
bool rightBtn = false;
bool jump = false;

void Start()
{
    myRigidbody = GetComponent<Rigidbody2D>();
    myAnim = GetComponent<Animator>();
}

// Update is called once per frame
void Update()
{
    leftBtn = false;
    rightBtn = false;
    jump = false;
    if(Input.touches.Length > 0){
        Touch touch = Input.touches [0];
        if (touch.position.y > Screen.height / 2) {
            jump = true;
        } else {
            if (touch.position.x > Screen.width / 2) {
                rightBtn = true;
            } else {
                leftBtn = true;
            }
        }
    }


    isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);

    if (rightBtn)
    {
        myRigidbody.velocity = new Vector3(moveSpeed, 
            myRigidbody.velocity.y, 0);
    }
    else if (leftBtn)
    {
        myRigidbody.velocity = new Vector3(-moveSpeed, 
        myRigidbody.velocity.y, 0f);
    }
    else
    {
        myRigidbody.velocity = new Vector3(0f, myRigidbody.velocity.y,0f);
    }

    if (jump && isGrounded)
    {
        myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, jumpSpeed, 0f);
    }

    myAnim.SetFloat("Speed", Mathf.Abs(myRigidbody.velocity.x));
    myAnim.SetBool("Grounded", isGrounded);
}

Если вы хотите, вы можете поэкспериментировать с Screen.width / 2 и Screen.height / 2, чтобы получить различные области экрана, запускающие различные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...