角色选择界面角色与鼠标的旋转交互
发表于2017-12-01
这里的脚本要实现的功能是在角色选择界面,人物3D模型自动旋转,然后鼠标在角色身上向左拖拽,角色往左旋转;向右拖拽,角色向右旋转,拖拽后角色旋转方向与退出拖拽时,鼠标的移动方向一致。单击人物则停止旋转,一起来看看实现的方法吧。
下面是脚本:
using UnityEngine; using System.Collections; public class OnCharacterClick : MonoBehaviour { Vector3 preMousePos,downPos; float rotateDir=1; bool dragging; public float rotateSmoothing; // Use this for initialization void Start () { InvokeRepeating("detectMousePos",0.1f,0.1f); } void detectMousePos() { preMousePos = Input.mousePosition; } // Update is called once per frame void Update () { if (!dragging) { transform.Rotate(transform.up,rotateDir*rotateSmoothing); } } void OnMouseDrag() { dragging = true; //当值小于0,说明鼠标向左拖,否则相反 float dragDeltaX=Input.mousePosition.x - preMousePos.x; transform.Rotate(transform.up,dragDeltaX*3600000); } void OnMouseDown() { downPos = Input.mousePosition; } void OnMouseUp() { float deltaX=Input.mousePosition.x-downPos.x; if (Mathf.Abs(deltaX)>0.2) { if (deltaX < 0) { rotateDir = 1; } else { rotateDir = -1; } dragging = false; } } }将其放到角色身上,设置公有属性即可。
然后角色身上的rigidBody记得设置如下:
如果你脚本要放的物体是NGUI的子物体,也就是说他的transform.root是UIRoot的,因为Unity的鼠标事件在NGUI不响应了,那么程序要稍作修改:
using UnityEngine; using System.Collections; public class RotateSelf : MonoBehaviour { Vector3 preMousePos, downPos; float rotateDir = 1; bool dragging; public float rotateSmoothing; // Use this for initialization void Start() { InvokeRepeating("detectMousePos", 0.1f, 0.1f); } void detectMousePos() { preMousePos = Input.mousePosition; } // Update is called once per frame void Update() { if (!dragging) { transform.Rotate(transform.up, rotateDir * rotateSmoothing); } } void OnDrag() { //当值小于0,说明鼠标向左拖,否则相反 float dragDeltaX = Input.mousePosition.x - preMousePos.x; transform.Rotate(transform.up, dragDeltaX * 3600000); } void OnPress(bool isDown) { if (isDown) { dragging = true; downPos = Input.mousePosition; } else { float deltaX = Input.mousePosition.x - downPos.x; if (Mathf.Abs(deltaX) > 0.2) { if (deltaX < 0) { rotateDir = 1; } else { rotateDir = -1; } dragging = false; } } } }
或者直接不需要自动旋转,可以使用NGUI提供的Spin With Mouse脚本,它提供了鼠标拖拽绕Y轴旋转的功能。或者如果只需要旋转可以使用transform的raotation的Animation。