I am making a dual stick shooter for mobile. I got joysticks that work fine, but there is a small issue. While holding the "move" joystick, I can additionally hold and move the "aim" joystick, but if I am holding the "aim" joystick and then try to grab the "move" joystick, I am unable to. I am wondering if it is an issue with event system input, and if there is any way of fixing it.
Script here:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class VirtuaJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler {
private Image bgImg;
public Image joystickImg;
public Player PlayerScript;
public bool HoldInputAfterPointUp = false;
public bool IsPressed = false;
public Vector3 InputDirection{ set; get; }
public Vector3 IDA;
public string JoystickIdentity = "";
private void Start()
{
bgImg = GetComponent();
InputDirection = Vector3.zero;
}
public virtual void OnDrag(PointerEventData ped) {
Vector2 pos = Vector2.zero;
if(RectTransformUtility.ScreenPointToLocalPointInRectangle
(bgImg.rectTransform,
ped.position,
ped.pressEventCamera,
out pos))
pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);
pos.y = (pos.y / bgImg.rectTransform.sizeDelta.y);
float x = (bgImg.rectTransform.pivot.x == 1) ? pos.x * 2 + 1 : pos.x * 2 - 1;
float y = (bgImg.rectTransform.pivot.y == 1) ? pos.y * 2 + 1 : pos.y * 2 - 1;
InputDirection = new Vector3(x, y, 0);
InputDirection = (InputDirection.magnitude > 1) ? InputDirection.normalized : InputDirection;
IDA = (InputDirection.magnitude > 1) ? InputDirection.normalized : InputDirection;
joystickImg.rectTransform.anchoredPosition = new Vector3(InputDirection.x * (bgImg.rectTransform.sizeDelta.x / 3), InputDirection.y * (bgImg.rectTransform.sizeDelta.y / 3));
PlayerScript.CurrentJoystickInput = JoystickIdentity;
}
public virtual void OnPointerDown(PointerEventData ped) {
OnDrag(ped);
IsPressed = true;
}
public virtual void OnPointerUp(PointerEventData ped) {
IsPressed = false;
OnDrag(ped);
//PlayerScript.AimInputDirSave = InputDirection;
if(!HoldInputAfterPointUp) {
InputDirection = Vector3.zero;
}
joystickImg.rectTransform.anchoredPosition = Vector3.zero;
}
}
Thanks Unity Community!
↧