Hi,
I am testing my iphone game with unity remote, but touchphase.began is always running.
code:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Joystick : MonoBehaviour {
private Vector3 origin;
public float flexibility;
private bool pointerDown;
public RectTransform joystickBoundaries;
public CanvasScaler controlCanvas;
public GameObject player;
private Vector3 playerPoleTarget;
public Touch closestTouch;
void Start () {
origin = joystickBoundaries.localPosition;
}
void Update () {
if (pointerDown == true)
{
if (closestTouch.phase == TouchPhase.Moved)
{
float xScale = controlCanvas.referenceResolution.x / Screen.width;
float yScale = controlCanvas.referenceResolution.y / Screen.height;
float fromLeft = origin.x + controlCanvas.referenceResolution.x / 2;
float fromBottom = origin.y + controlCanvas.referenceResolution.y / 2;
Vector3 touchPos = new Vector3 (closestTouch.position.x * xScale - fromLeft, closestTouch.position.y * yScale - fromBottom, 0);
if (Vector3.Distance (Vector3.zero, touchPos) > flexibility)
{
touchPos = Vector3.ClampMagnitude (touchPos, flexibility);
}
GetComponent <RectTransform> ().localPosition = touchPos;
playerPoleTarget = touchPos * 10;
player.transform.LookAt (new Vector3 (player.transform.position.x + playerPoleTarget.x, player.transform.position.y, player.transform.position.z + playerPoleTarget.y));
player.GetComponent <PlayerController> ().direction = Vector3.forward * touchPos.y + Vector3.right * touchPos.x;
}
if (closestTouch.phase == TouchPhase.Ended)
{
pointerDown = false;
GetComponent <RectTransform> ().localPosition = Vector3.zero;
player.GetComponent <PlayerController> ().direction = Vector3.zero;
}
}
}
void OnMouseDown () {
if (Input.touchCount > 0)
{
float distance = Mathf.Infinity;
foreach (Touch touch in Input.touches)
{
float xScale = controlCanvas.referenceResolution.x / Screen.width;
float yScale = controlCanvas.referenceResolution.y / Screen.height;
float fromLeft = origin.x + controlCanvas.referenceResolution.x / 2;
float fromBottom = origin.y + controlCanvas.referenceResolution.y / 2;
Vector3 touchPos = new Vector3 (touch.position.x * xScale - fromLeft, touch.position.y * yScale - fromBottom, 0);
float newDistance = Vector3.Distance (origin, touchPos);
if (newDistance < distance)
{
closestTouch = touch;
distance = newDistance;
}
}
pointerDown = true;
}
}
}