unity3d控制物品的移動(鼠標或上下左右WASD)

通過 Mathf.Clamp控制區域範圍

上下左右和WSAD 的控制

使用前提:給對象添加剛體 Componet —-> Physics —-> rigidbody

   public float speed;
    public float minX;
    public float maxX;
    public float minZ;
    public float maxZ;
//這個是視角旋轉了90度的 所以移動的面是xz 這個可以根據自己的需求做對應的變化
    private void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        GetComponent<Rigidbody>().velocity = movement * speed;

        GetComponent<Rigidbody>().position = new Vector3(

            Mathf.Clamp(GetComponent<Rigidbody>().position.x, minX, maxX),
            0.0f,
            Mathf.Clamp(GetComponent<Rigidbody>().position.z, minZ, maxZ)

            );//空間位置進行一個限定


    }

鼠標按住移動

使用前提:給對象添加碰撞盒 Componet —-> Physics —-> Box Collider

 void Start()
    {
        StartCoroutine(OnMouseDown());
    }

    int minXX = 301;
    int minYY = 58;
    int maxXX = 654;
    int maxYY = 492;
    IEnumerator OnMouseDown()
    {
        Debug.Log("OnMouseDown");
        //將物體由世界座標系轉換爲屏幕座標系
        Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三維物體座標轉屏幕座標
        //完成兩個步驟 1.由於鼠標的座標系是2維,需要轉換成3維的世界座標系 
        //    //             2.只有3維座標情況下才能來計算鼠標位置與物理的距離,offset即是距離
        //將鼠標屏幕座標轉爲三維座標,再算出物體位置與鼠標之間的距離

        Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
        while (Input.GetMouseButton(0))
        {
           Debug.Log("GetMouseButton----Input.mousePosition.x y z" + Input.mousePosition.x+","+ Input.mousePosition.y+","+ Input.mousePosition.z);

            //得到現在鼠標的2維座標系位置new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);
            Vector3 curScreenSpace =new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)
            //將當前鼠標的2維位置轉換成3維位置,再加上鼠標的移動量
            Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
            //curPosition就是物體應該的移動向量賦給transform的position屬性
            transform.position = curPosition;
            yield return new WaitForFixedUpdate(); //這個很重要,循環執行
        }
    }

兩個不衝突 可同時存在

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