using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
public Rocker rocker;
public new Rigidbody rigidbody;
public float speed;
Vector2 offset;
private void Awake()
{
rocker.Radius = 100;
rocker.onDrag = OnMove;
rocker.onEndDrag = () => { offset = Vector3.zero; };
}
private void LateUpdate()
{
rigidbody.velocity = new Vector3(offset.x,0, offset.y)*speed;
}
void OnMove(Vector2 vector)
{
offset = vector;
}
}
using System;
using UnityEngine;
using UnityEngine.EventSystems;
public class Rocker : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public Action<Vector2> onBegin;
public Action<Vector2> onDrag;
public Action onEndDrag;
float min = 0;
float max;
float radius;
float distance;
Vector2 start;
Vector2 offset;
Vector2 normalization;
public float Radius
{
get
{
return radius;
}
set
{
radius = value;
max = radius;
distance = max - min;
}
}
void IEndDragHandler.OnEndDrag(PointerEventData eventData)
{
onEndDrag?.Invoke();
}
void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
{
start = eventData.position;
onBegin?.Invoke(start);
}
void IDragHandler.OnDrag(PointerEventData eventData)
{
offset = eventData.position - start;
normalization = new Vector2((offset.x - min) / distance, (offset.y - min) / distance);
normalization.Set(Mathf.Clamp(normalization.x, -1, 1), Mathf.Clamp(normalization.y, -1, 1));
onDrag?.Invoke(normalization);
}
}