TouchController.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class TouchController : MonoBehaviour { public static float Horizontal = 0, Vertical = 0; void Awake() { SetupButton(transform.Find("up").gameObject, Vector2.up); SetupButton(transform.Find("down").gameObject, Vector2.down); SetupButton(transform.Find("left").gameObject, Vector2.left); SetupButton(transform.Find("right").gameObject, Vector2.right); } void SetupButton(GameObject buttonObject, Vector2 position) { EventTrigger eventTrigger = buttonObject.AddComponent<EventTrigger>(); var pointerDown = new EventTrigger.Entry(); pointerDown.eventID = EventTriggerType.PointerDown; pointerDown.callback.AddListener((e) => UpdateAxisValue(position)); eventTrigger.triggers.Add(pointerDown); var pointerUp = new EventTrigger.Entry(); pointerUp.eventID = EventTriggerType.PointerUp; pointerUp.callback.AddListener((e) => UpdateAxisValue(position, reset: true)); eventTrigger.triggers.Add(pointerUp); } void UpdateAxisValue(Vector2 position, bool reset = false) { if (position.x == 0) Vertical = reset ? 0 : position.y; else Horizontal = reset ? 0 : position.x; } }
TouchMove.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(Rigidbody))] public class TouchMove : MonoBehaviour { public float speed = 5; Rigidbody rigidBody; void Awake() { rigidBody = GetComponent<Rigidbody>(); } void FixedUpdate() { float inputH = TouchController.Horizontal; float inputV = TouchController.Vertical; rigidBody.velocity = new Vector3(inputH * speed, rigidBody.velocity.y, inputV * speed); } }