Как сделать, чтобы 3D-объект следовал моему пальцу слева направо на Android?

Я новичок в единстве и разработке игр, поэтому я попытался сделать игру. Все работало хорошо, пока я не подумал о переходе с игры на ПК на Android.

Движение на ПК работало хорошо, но я не могу найти какой-либо код для такого же движения для Android.

Это то, что я использую для движения ПК

public class PlayerMovement : MonoBehaviour
{
    public Rigidbody rb;

    public float forwardForce = 2000f;
    public float sidewayForce = 500f;

    // Update is called once per frame
    void FixedUpdate()
    {
        rb.AddForce(0, 0, forwardForce * Time.deltaTime);

        if ( Input.GetKey("d") )
        {
            rb.AddForce(sidewayForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
        }

        if (Input.GetKey("a"))
        {
            rb.AddForce(-sidewayForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
        }

        if (rb.position.y < -1f)
        {
            FindObjectOfType<GameManager>().EndGame();
        }
    }
}

и это то, что я использовал для движения андроида, но единственная проблема в том, что он не идет вперед, а игрок даже не двигается. Этот скрипт каким-то образом перемещает платформу, на которой находится игрок.

public class PlayerMovANDROID : MonoBehaviour
{

    // Use this for initialization
    GameObject hitObj;
    RaycastHit hit;
    private float speed = 1;

    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        foreach (Touch touch in Input.touches)
        {
            switch (touch.phase)
            {
                case TouchPhase.Began:
                    Ray ray = Camera.main.ScreenPointToRay(touch.position);
                    if (Physics.Raycast(ray, out hit, 10))
                    {
                        hitObj = hit.collider.gameObject;
                    }
                    break;
                case TouchPhase.Moved:

                    // If the finger is on the screen, move the object smoothly to the touch position          
                    float step = speed * Time.deltaTime; // calculate distance to move
                    if (hitObj != null)
                        hitObj.transform.position = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, hitObj.transform.position.z));
                    break;
            }
        }
    }
}

1 ответ

Вы используете кнопки GUI для перемещения плеера?

Если нет, вы можете использовать: горизонтальный = Input.GetAxis("Mouse X") и вертикальный =Input.GetAxis("Mouse Y") чтобы определить, где игрок разместил палец на экране.

Получив их, вы должны назначить их объекту через Transform через

transform.Rotate(horizontal, vertical ,z);

transform.Translate(horizontal, vertical ,z);

transform.position(horizontal, vertical ,z);

Проверьте это для получения дополнительной информации.

Другие вопросы по тегам