unity中人物旋转

时间:2021-08-15 10:22:27

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));
}