Добавьте джойстик и сенсорное управление для Android для 3D персонажа на Unity - PullRequest
0 голосов
/ 18 апреля 2020

Может кто-нибудь сказать мне, как я могу заставить 3D-персонажа двигаться с помощью мобильного джойстика? Я занимаюсь разработкой для Android для Unity, и эта часть, на которой я застрял, в основном, я хочу иметь возможность перемещать персонажа с помощью джойстика, а затем поворачиваться, касаясь экрана.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Это мой текущий код:

    using UnityEngine;
using UnityEngine.AI;

public class PlayerMover : MonoBehaviour {
    public Joystick joystick;
    public float characterSpeed = 175f;
    public float turnSpeed = 10f;

    void Start() {

        joystick = FindObjectOfType<Joystick>();

    }
    void Update() {

      var rigidbody = GetComponent<Rigidbody>();
      rigidbody.velocity = new Vector3(joystick.Horizontal * characterSpeed, rigidbody.velocity.y, joystick.Vertical * characterSpeed);
      float turn = Input.GetAxis("Horizontal") * turnSpeed;
            transform.Rotate(0, turn * turnSpeed * Time.deltaTime, 0);

      UpdateAnimator();

    }
    private void UpdateAnimator() {

      Vector3 velocity = GetComponent<Rigidbody>().velocity;
      Vector3 localVelocity = transform.InverseTransformDirection(velocity);
      float speed = localVelocity.z;
      GetComponent<Animator>().SetFloat("movementSpeed", speed);

    }

}
0 голосов
/ 18 апреля 2020

Для подключенного джойстика он в основном похож на любой джойстик P C. Так что вам просто нужно использовать старомодный метод Input.GetAxis("Vertical") и Input.GetAxis("Horizontal"). Обязательно сопоставьте их во входе от всех джойстиков в вашем Предпочтении проекта> Входы . Официальный do c

Что касается касания, он также легко работает с Input.GetTouch (0) .position Официальный do c

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

private static Vector3 GetPositionFromScreenPosition(Vector3 screenPosition)
{
    Ray ray = Camera.main.ScreenPointToRay(screenPosition);

    if (Physics.Raycast(ray, out RaycastHit hit))
    {
        return hit.point;
    }

    return Vector3.zero;
}

Оба хорошо работают на одном и том же Update () или FixedUpdate () метод.

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