1、通过获取鼠标经过点来旋转
using UnityEngine;
using System.Collections;
///
/// 人物模型转动
///
public class HeroModelRotate : MonoBehaviour
{
///
/// 第一次按下的位置
///
private Vector2 first = Vector2 .zero;
///
/// 鼠标的拖拽位置(第二次的位置)
///
private Vector2 second = Vector2 .zero;
///
/// 旋转的角度
///
private float angle = 3f;
void OnGUI()
{
if (Event.current.type == EventType.MouseDown)
{
//记录鼠标按下的位置
first = Event.current.mousePosition;
}
if (Event.current.type == EventType.MouseDrag)
{
//记录鼠标拖动的位置
second = Event.current.mousePosition;
if (second.x < first.x)
{
//拖动的位置的x坐标比按下的位置的x坐标小时,响应向左事件
this.transform.Rotate(Vector3.up, angle);
}
if (second.x > first.x)
{
//拖动的位置的x坐标比按下的位置的x坐标大时,响应向右事件
this.transform.Rotate(Vector3.down, angle);
}
first = second;
}
}
}
2、通过unity中自带的函数IDragHandler,IDragHandler, IBeginDragHandler, IEndDragHandler,
IPointerDownHandler建一个脚本,继承这个接口,实现这个接口,注册事件,用回调来实现,写一个回调类
public class TouchEX : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler,
IPointerDownHandler
{
public Action DragCallback;
public Action BeginDragCallback;
public Action EndDragCallback;
public Action PointerDownCallback;
public void OnBeginDrag(PointerEventData eventData)
{
if (BeginDragCallback != null)
{
BeginDragCallback.Invoke(eventData);
}
}
public void OnDrag(PointerEventData eventData)
{
if (DragCallback != null)
{
DragCallback.Invoke(eventData);
}
}
public void OnEndDrag(PointerEventData eventData)
{
if (EndDragCallback != null)
{
EndDragCallback.Invoke(eventData);
}
}
public void OnPointerDown(PointerEventData eventData)
{
if (PointerDownCallback != null)
{
PointerDownCallback.Invoke(eventData);
}
}
}
在unity中建一个Image,附上这个脚本,在写一个脚本,获取这个组件,注册事件,实现旋转
var touchLayer = GameObject.Find(“Touch”).GetComponent();
touchLayer.DragCallback = onModelDrag;
private void onModelDrag(PointerEventData eventData)
{
_modelPlace.transform.Rotate(new Vector3(0, -eventData.delta.x * Speed, 0));
}