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) при каждом прикосновении к экрану.