Джойстик неожиданно движется в Unity - PullRequest
0 голосов
/ 20 февраля 2019

Контекст: я использую FixedJoystick в пакете Joystick Pack от Fenerax Studios в хранилище ресурсов Unity в моем проекте.

Проблема заключается в том, что всякий раз, когда я касаюсь джойстика (даже не перемещая его), ручка немедленно перемещается вверхний правый угол и моя модель в результате движется вниз.

Ниже приведено изображение, иллюстрирующее проблему с джойстиком

enter image description here

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

Вот код:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class FixedJoystick : Joystick
{
    Vector2 joystickPosition = Vector2.zero;
    public GameObject heldDownBlockRegion;
    private Camera cam = new Camera();
    private bool inARMode = true;



void Start()
{
    joystickPosition = RectTransformUtility.WorldToScreenPoint(cam, background.position);
    gameObject.SetActive(false);

}


public override void OnDrag(PointerEventData eventData)
{
    Vector2 direction = eventData.position - joystickPosition;
    inputVector = (direction.magnitude > background.sizeDelta.x / 2f) ? direction.normalized : direction / (background.sizeDelta.x / 2f);
    ClampJoystick();
    handle.anchoredPosition = (inputVector * background.sizeDelta.x / 2f) * handleLimit;
}

public override void OnPointerDown(PointerEventData eventData)
{
    heldDownBlockRegion.SetActive(true);
    OnDrag(eventData);
}

public override void OnPointerUp(PointerEventData eventData)
{
    heldDownBlockRegion.SetActive(false);
    inputVector = Vector2.zero;
    handle.anchoredPosition = Vector2.zero;
}

public void changeToAR()
{
    showJoyStick(false);
    inARMode = true;
}

public void changeToNonAR()
{
    inARMode = false;
}

public void showJoyStick(bool action)
{
    if (!inARMode)
    {
        if (action == false)
        {
            heldDownBlockRegion.SetActive(false);
            inputVector = Vector2.zero;
            handle.anchoredPosition = Vector2.zero;
        }
        gameObject.SetActive(action);
    }
}
}

Я довольно новичок в этом и был бы очень признателен за любую помощь.Спасибо!

...