Unity屏幕鼠標移動模型

本文章僅僅用於個人記錄。
需求:鼠標按下,獲取鼠標按下後的移動向量。
1、用於記錄鼠標的移動向量,camDela。
2、用於記錄鼠標按下的初始位置,startPos。
if 鼠標按下
判斷位置 startPos是否爲初始位置,如果是,設置startPos值,否則設置camDela值 = 按下位置-startPos
if 鼠標鬆開
camDela和startPos初始化。

using UnityEngine;
using System.Collections;

public class CalDirection : MonoBehaviour
{
    public static Vector3 camDela;
    private Vector3 startPos = Vector3.zero;
    // Use this for initialization
    void Start()
    {
        camDela = Vector3.left;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            if (startPos == Vector3.zero)
            {
                startPos = Input.mousePosition;
            }
            else
            {
                camDela = Input.mousePosition - startPos;
            }
        }else if (Input.GetMouseButtonUp(0))
        {
            camDela = Vector3.left;
            startPos = Vector3.zero;
        }
    }
}

利用獲取到的鼠標位置向量,進行模型的移動,模型使用的碰撞檢測體爲 character collider。
將模型的y軸(up)映射到世界座標系的xz面,將模型的x(right)軸映射到世界座標系的xz面,
根據全局static 變量 camDela,來獲取到該向量在xz軸上的投影,其中包含,camDela 的x軸和y軸,然後根據獲得的投影向量進行移動。然後分別計算映射後的向量並相加,最後移動。
其中motion.y-=1000,用於將模型緊貼地面。

public class Move : MonoBehaviour
{

    private CharacterController cc;
    // Use this for initialization
    void Start()
    {
        cc = GetComponent<CharacterController>();
    }
    // Update is called once per frame
    void Update()
    {
        Debug.Log(CalDirection.camDela);
        if(CalDirection.camDela == Vector3.left)
        {
            return;
        }
        Vector3 WorldYDirection = Camera.main.transform.TransformDirection(Vector3.up);
        Vector3 GrandYDirection = new Vector3(WorldYDirection.x, 0, WorldYDirection.z).normalized * CalDirection.camDela.y;
        Vector3 WorldXDirection = Camera.main.transform.TransformDirection(Vector3.right);
        Vector3 GrandXDirection = new Vector3(WorldXDirection.x, 0, WorldXDirection.z).normalized * CalDirection.camDela.x;
        Vector3 direction = (GrandYDirection + GrandXDirection).normalized;
        Vector3 motion = direction * Time.deltaTime;
        motion.y -= 1000;
        cc.Move(motion);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章