Как я могу конвертировать этот скрипт движения игрока для сенсорного экрана? - PullRequest
1 голос
/ 01 мая 2019

У меня есть сценарий перемещения работающего игрока, который я сделал из бесплатного сценария 2D-контроллера контроллера персонажей, и мой собственный, он работает с помощью клавиш A и D на клавиатуре для перемещения влево и вправо.

Iхочу, чтобы этот код работал для мобильных телефонов с сенсорным экраном.По сути, вы нажимаете левую сторону экрана, чтобы двигаться влево, правую - вправо.

Я все еще новичок в C # и могу использовать справку.

Вот мой текущий сценарий движения игрока.

Заранее спасибо!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

[Range(0, .3f)] [SerializeField] private float m_MovementSmoothing = .05f;

private Rigidbody2D m_Rigidbody2D;

private Vector3 m_Velocity = Vector3.zero;

public float runSpeed = 40f;

float horizontalMove = 0f;


private void Awake()
{
    m_Rigidbody2D = GetComponent<Rigidbody2D>();
}

public void Move(float move)
{
    // Move the character by finding the target velocity
    Vector3 targetVelocity = new Vector2(move * 10f, 
    m_Rigidbody2D.velocity.y);

    // And then smoothing it out and applying it to the character
    m_Rigidbody2D.velocity = Vector3.SmoothDamp(m_Rigidbody2D.velocity, 
targetVelocity, ref m_Velocity, m_MovementSmoothing);

}

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

    horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;

}

void FixedUpdate()
{
    // Move our character
    Move(horizontalMove * Time.fixedDeltaTime);
}

}

1 Ответ

2 голосов
/ 01 мая 2019

Существует несколько решений для этого, но одним из них может быть использование API ввода для получения касаний:

void Update()
{
    horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed; 

    for (int i = 0; i < Input.touchCount; ++i)
    {
        Touch touch = Input.GetTouch(i);
        bool touchIsOnRightSide = touch.position.x > Screen.width / 2;

        horizontalMove.x = runSpeed;
        if (!touchIsOnRightSide)
            horizontalMove.x *= -1;
    }

}

В этом коде мы пройдемся по всем касаниям и проверим, находятся ли они справаили влево, проверив, больше или меньше координаты X касания, чем координаты X в центре экрана, а затем примените движение в этом направлении.

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