角色选择界面角色与鼠标的旋转交互
发表于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。
