Как заблокировать аналоговый джойстик на экране?(3D) - PullRequest
0 голосов
/ 31 марта 2019

https://imgur.com/a/cKTr9RJ

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

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

Я пытался использовать canvas и UI, но, похоже, не сработало, все равно показывает это случайно на экране мира, возможно, я сделал что-то не так.

public Transform player;
public float speed = 5.0f;
private bool touchStart = false;
private Vector2 pointA;
private Vector2 pointB;


public Transform circle;
public Transform outerCircle;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        pointA = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
        circle.transform.position = pointA * -1;
        outerCircle.transform.position = pointA * -1;
        circle.GetComponent<SpriteRenderer>().enabled = true;
        outerCircle.GetComponent<SpriteRenderer>().enabled = true;
    }
    if (Input.GetMouseButton(0))
    {
        touchStart = true;
        pointB = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
    }
    else
    {
        touchStart = false;
    }
}
private void FixedUpdate()
{
    if (touchStart)
    {
        Vector2 offset = pointB - pointA;
        Vector2 direction = Vector2.ClampMagnitude(offset, 1.0f);
        moveCharacter(direction * -1);
        circle.transform.position = new Vector2(pointA.x + direction.x, pointA.y + direction.y) * -1;
    }
    else
    {
        circle.GetComponent<SpriteRenderer>().enabled = false;
        outerCircle.GetComponent<SpriteRenderer>().enabled = false;
    }
}
void moveCharacter(Vector2 direction)
{
    player.Translate(direction * speed * Time.deltaTime);
}

}

Я хочу, чтобы он отображался в пределах экрана в пределах 2d (1920x1080) при каждом прикосновении к экрану.

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