角色選擇界面角色與鼠標的旋轉交互

這裏的腳本要實現的功能是在角色選擇界面,

人物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。



最後大家有什麼好的腳本歡迎分享出來共同進步!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章