Среда, 18 Декабря 2024, 08:39

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с сокращенным скриптом Joystick из Simple Assets
romeo98Дата: Среда, 24 Декабря 2014, 18:27 | Сообщение # 1
участник
Сейчас нет на сайте
Решил избавится от лишнего, по моему мнению, кода Joystick´a в новом ассете Sample Assets (Standart Assets хотят потом заменить им).

Вышел один скрипт без всяких унаследований и лишних пространств имен (только интерфейсы EventSystems).
Код

using UnityEngine;
using UnityEngine.EventSystems;

public class VJoystick : MonoBehaviour, IPointerUpHandler, IPointerDownHandler, IDragHandler
{

           public int MovementRange = 100;

           [HideInInspector] public static float x;
           [HideInInspector] public static float y;

           public enum AxisOption
           {                    // Options for which axes to use                          
               Both,                    // Use both
               OnlyHorizontal,                    // Only horizontal
               OnlyVertical                    // Only vertical
           }

           public AxisOption axesToUse = AxisOption.Both;   // The options for the axes that the still will use
                  
           private Vector3 startPos;
           private bool useX;                    // Toggle for using the x axis
           private bool useY;                    // Toggle for using the Y axis

           void Start()
           {

               startPos = transform.position;

               // set axes to use
               useX = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyHorizontal);
               useY = (axesToUse == AxisOption.Both || axesToUse == AxisOption.OnlyVertical);

           }

           private void UpdateVirtualAxes(Vector3 value)
           {

               var delta = startPos - value;
               delta.y = -delta.y;
               delta /= MovementRange;
               if (useX)
                   x = -delta.x;

               if (useY)
                   y = delta.y;

           }

           public void OnDrag(PointerEventData data)
           {

               Vector3 newPos = Vector3.zero;

               if (useX)
               {
                   int delta = (int)(data.position.x - startPos.x);
                   delta = Mathf.Clamp(delta, -MovementRange, MovementRange);
                   newPos.x = delta;
               }

               if (useY)
               {
                   int delta = (int)(data.position.y - startPos.y);
                   delta = Mathf.Clamp(delta, -MovementRange, MovementRange);
                   newPos.y = delta;
               }
               transform.position = new Vector3(startPos.x + newPos.x, startPos.y + newPos.y, startPos.z + newPos.z);
               UpdateVirtualAxes(transform.position);
           }

           public void OnPointerUp(PointerEventData data)
           {
               transform.position = startPos;
               UpdateVirtualAxes(startPos);
           }

           public void OnPointerDown(PointerEventData data)
           {
           }

}


Проблема в том, что джойстик уже на мобильном тесте игры слишком ограничен и не реагирует на значение переменной Movement Range. По идеи, чем больше Movement Range, тем дальше от начальной точки я могу подвинуть джойстик, но на практике не так. Используя родной скрипт (без моего сокращения) была такая же проблема. В Editor все работает правильно.

Добавлено (24 декабря 2014, 18:27)
---------------------------------------------
Я понял! На мобилке требуется число на много больше, чем в Editor. В editor мне достаточно поставить в переменную Movement Range 35, а для мобилки 250... тогда будет все ок...


Flist - social platform
PuzzleSystem - Open-source Unity Asset
[2D] Mission: Defender


Сообщение отредактировал romeo98 - Среда, 24 Декабря 2014, 18:12
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг