Unity中鼠標拖動物體移動的算法

鼠標拖動物移動在遊戲設計上用的很是多,像飛機射擊遊戲,我來分享下個人思路:算法

   個人思路: 由於鼠標的屏幕座標是二維的,物體是世界座標,三維的。首先將鼠標的屏幕座標轉換爲三維的世界座標,這樣爲了計算鼠標與物體位置之間的距離,再將移動後的鼠標的屏幕座標轉換爲世界座標,加上以前的距離量,將和值賦給物體座標,就能夠實現了。設計

C#算法實現:orm

IEnumerator OnMouseDown()
    {
        //將物體由世界座標系轉換爲屏幕座標系
        Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);
        //三維物體座標轉屏幕座標
        //鼠標的座標系是2維,須要轉換成3維的世界座標系 
         //只有3維座標狀況下才能來計算鼠標位置與物理的距離,offset便是距離
        //將鼠標屏幕座標轉爲三維座標,再算出物體位置與鼠標之間的距離
        Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,screenSpace.z));
      while(Input.GetMouseButton(0))
      {
          //獲得如今鼠標的2維座標系位置
          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();//循環執行,等到固定幀更新
      }
    }遊戲

相關文章
相關標籤/搜索