Unity物体跟随鼠标移动
生活随笔
收集整理的這篇文章主要介紹了
Unity物体跟随鼠标移动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? 剛開始在將鼠標點轉換為世界坐標時,我以為可以直接使用Unity的Camera.main.ScreenToWorldPoint( Input.mousePosition ) 就完事了,事實證明我想的太簡單了。在我們使用這個API將鼠標屏幕點(Screen)轉換成世界坐標(World)的時候,因為鼠標點z值的原因,直接使用的話得到的永遠是一個固定值(Camera.main 的世界坐標),所以我們需要將鼠標點進行一個修正。
鼠標點直接轉換為世界坐標 攝像機坐標????????處理的方法:
1.我們將需要跟隨鼠標移動物體的世界坐標轉換為屏幕坐標(World→Screen)。
//將目標物體的世界坐標轉換成屏幕坐標 Vector3 targetScreenPos =?Camera.main.WorldToScreenPoint(target.transform.position);2.然后將轉換后的 z值傳給鼠標坐標,修正鼠標坐標。
//修正后的鼠標坐標 Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPos.z);3.現在就可以把修正后的mousePos轉換為世界坐標了
//將修正后的鼠標位置 轉換為世界坐標 Vector3 mouseSToW = Camera.main.ScreenToWorldPoint(mousePos);完整代碼:
//鼠標按下時 鼠標點的位置Vector3 mouseStartMovePos;//鼠標按下時 target的位置Vector3 targetStartMovePos;private void FollowMove(){//將 target世界坐標轉換成屏幕坐標Vector3 targetScreenPos = Camera.main.WorldToScreenPoint(target.transform.position);//修正鼠標點的坐標Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPos.z);//將 修正后的鼠標點 轉換成世界坐標Vector3 mouseSToW = Camera.main.ScreenToWorldPoint(mousePos);//鼠標按下時記錄 鼠標點的位置 和 target的位置if (Input.GetMouseButtonDown(0)){mouseStartMovePos = mouseSToW ;targetStartMovePos = target.transform.position;}//跟隨移動,加上偏移if (Input.GetMouseButton(0)){target.transform.position = targetStartMovePos + mouseSToW - mouseStartMovePos;}}總結
以上是生活随笔為你收集整理的Unity物体跟随鼠标移动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 轮播代码生成器,阿里巴巴国际站全
- 下一篇: 计算机硬件知识考证题,计算机硬件知识题(