Оптимизация EventSystem

Раздел, посвящённый самому важному - скорости.

Оптимизация EventSystem

Сообщение horjoy 14 ноя 2023, 21:19

Сейчас делаю 3д игру и пытаюсь максимально оптимизировать все.
И когда уже скрипты мои почти не ощущаются я решил копать дальше, и в профайлере заметил что EventSystem как то неприлично много ресурсов использует (в основном в момент когда пользователь взаимодействует с самописным джойстиком).
Вот что именно меня напрягает в профайлере
Скрытый текст:


и так же код джойстика
Скрытый текст:
Синтаксис:
Используется csharp
public class Joystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
    private Image joystickBG;
    [SerializeField]
    private Image joystick;
    private Vector2 inputVector;

    private Vector2 cachedSizeDelta;


    private void Start()
    {
        joystickBG = GetComponent<Image>&#40;&#41;;
        joystick = transform.GetChild&#40;0&#41;.GetComponent<Image>&#40;&#41;;
        cachedSizeDelta = joystickBG.rectTransform.sizeDelta;
    }

    public virtual void OnPointerDown&#40;PointerEventData eventData&#41;
    {
        OnDrag&#40;eventData&#41;;
    }

    public virtual void OnPointerUp&#40;PointerEventData eventData&#41;
    {
        inputVector = Vector2.zero;
        joystick.rectTransform.anchoredPosition = Vector2.zero;
    }

    public virtual void OnDrag&#40;PointerEventData eventData&#41;
    {
        Vector2 localPointerPosition;
        if &#40;RectTransformUtility.ScreenPointToLocalPointInRectangle&#40;joystickBG.rectTransform, eventData.position, eventData.pressEventCamera, out localPointerPosition&#41;&#41;
        {
            inputVector = localPointerPosition * 2f / cachedSizeDelta.y;
            inputVector = &#40;inputVector.magnitude > 1.0f&#41; ? inputVector.normalized : inputVector;

            joystick.rectTransform.anchoredPosition = new Vector2&#40;inputVector.x * &#40;cachedSizeDelta.y / 2&#41;, inputVector.y * &#40;cachedSizeDelta.y / 2&#41;&#41;;
        }
    }

    public float Horizontal&#40;&#41;
    {
        if &#40;inputVector.x != 0&#41; return inputVector.x;
        else return Input.GetAxis&#40;"Horizontal"&#41;;
    }

    public float Vertical&#40;&#41;
    {
        if &#40;inputVector.y != 0&#41; return inputVector.y;
        else return Input.GetAxis&#40;"Vertical"&#41;;
    }

}


Хотел бы узначть то тут именно нагружает и возможно решение как поправить это.
(может это сам по себе EventSystem такой)
horjoy
UNец
 
Сообщения: 2
Зарегистрирован: 04 июн 2022, 13:44

Re: Оптимизация EventSystem

Сообщение 1max1 15 ноя 2023, 14:03

Включи дип мод в профайлере и увидишь больше инфы по методам, в целом, там не такая большая нагрузка как для юи, который апдейтится.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Оптимизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3