最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity3D實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤

 更新時(shí)間:2021年08月08日 10:14:04   作者:JayW就是我吖  
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在培訓(xùn)模擬考試軟件中,我們經(jīng)常會(huì)遇到類似用鼠標(biāo)旋轉(zhuǎn)轉(zhuǎn)盤打開開關(guān)的需求。讓用戶更加真實(shí)的操作設(shè)備儀器。接下來(lái)說(shuō)下我的解決方案。

因?yàn)槭髽?biāo)操作是在UI平面上,所以我們要先將被操作的模型的世界坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo)上。代碼如下:

ModelScreenPos = camera.WorldToScreenPoint(Model.transform.position);

這里有個(gè)聲明,這個(gè)模型代表的是轉(zhuǎn)盤,而且要保證模型的中心點(diǎn)在轉(zhuǎn)盤中心。然后我們就要計(jì)算鼠標(biāo)以模型在屏幕坐標(biāo)為中心點(diǎn)的旋轉(zhuǎn)偏移量。我們開始以鼠標(biāo)按下的瞬間,偏移量為0,然后進(jìn)行每幀計(jì)算偏移量。偏移量也就是旋轉(zhuǎn)角度,很好計(jì)算,就是求兩個(gè)向量的夾角。角度angle=Vector2.Angle(OA,OB);

接下來(lái)我們要解決的就是旋轉(zhuǎn)方向是順時(shí)針還是逆時(shí)針的。利用unity的四元數(shù)公式

q = Quaternion.FromToRotation(OA, OB);

得出的四元數(shù)我們可以根據(jù)四元數(shù)的Z值判斷旋轉(zhuǎn)方向是順時(shí)針還是逆時(shí)針的。當(dāng)Z為正時(shí)就是逆時(shí)針旋轉(zhuǎn),當(dāng)為負(fù)時(shí)就是順時(shí)針啦??梢宰约簩憘€(gè)向量xy平面向量旋轉(zhuǎn)測(cè)試下。然后我們?cè)O(shè)置模型旋轉(zhuǎn)軸對(duì)應(yīng)的歐拉角分量加上我們獲得的旋轉(zhuǎn)角度。功能就實(shí)現(xiàn)了。思路大體是這樣,但是在實(shí)現(xiàn)過(guò)程中有很多小的設(shè)置需要注意下。下面是我的源代碼:

private Vector2 ModelPos;
 private Vector2 mousePos; //當(dāng)前鼠標(biāo)位置
 private Vector2 premousePos;//上一幀鼠標(biāo)位置
 private Quaternion q; 
 private float RotateAngle;
 private Vector3 localEluer; //模型歐拉角存儲(chǔ)變量
 
 private bool IsSelect = false;
 void Start()
 {
  ModelPos = camera.WorldToScreenPoint(go.transform.position);
  angle = localEluer.x = info.opening;
  go.transform.localEulerAngles = localEluer;
 }
 
 public virtual void Update()
 {
  if (Input.GetMouseButtonDown(0)&&modelCamera.IsTouch())
  {
   IsSelect = true;
   premousePos = mousePos=Input.mousePosition; //每次重新點(diǎn)擊的時(shí)候都重置鼠標(biāo)上一幀點(diǎn)擊坐標(biāo)
  }
  if (Input.GetMouseButton(0)&& IsSelect)
  {
   mousePos = Input.mousePosition;
   RotateAngle = Vector2.Angle(premousePos - ModelPos, mousePos - ModelPos);
   //Debug.Log("RotateAngle+"+RotateAngle);
   if (RotateAngle == 0)
   {
    premousePos = mousePos;
   }
   else
   {
    q = Quaternion.FromToRotation(premousePos - ModelPos, mousePos - ModelPos);
    float k = q.z > 0 ? 1 : -1;
    localEluer.x += k * RotateAngle;
    //Debug.Log(localEluer.x);
    angle = localEluer.x = Mathf.Clamp(localEluer.x, 0, AllowAngle); //這里是項(xiàng)目需要 限制一下旋轉(zhuǎn)圈數(shù)
    go.transform.localEulerAngles = localEluer;
    premousePos = mousePos;
   }
  }
  if (Input.GetMouseButtonUp(0))
  {
   IsSelect = false;
  } 
 }

效果圖如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中將DataTable轉(zhuǎn)化成List<T>的方法解析

    C#中將DataTable轉(zhuǎn)化成List<T>的方法解析

    大家應(yīng)該都知道在.net項(xiàng)目中使用到DataTable和List<T>集合的地方較多,有的時(shí)候需要將DataTable轉(zhuǎn)化成List<T>,那么改如何轉(zhuǎn)化呢?下面通過(guò)這篇文章來(lái)一起學(xué)習(xí)下吧,本文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值。
    2016-12-12
  • 全面分析c# LINQ

    全面分析c# LINQ

    這篇文章主要介紹了c# LINQ的相關(guān)資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-08-08
  • 詳解C#中的依賴注入和IoC容器

    詳解C#中的依賴注入和IoC容器

    這篇文章主要介紹了C#中的依賴注入和IoC容器的相關(guān)資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#調(diào)用海康工業(yè)相機(jī)SDK采集圖像并在Halcon窗口中顯示方式

    C#調(diào)用海康工業(yè)相機(jī)SDK采集圖像并在Halcon窗口中顯示方式

    這篇文章主要介紹了C#調(diào)用??倒I(yè)相機(jī)SDK采集圖像并在Halcon窗口中顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼

    C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼

    這篇文章主要介紹了C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • C#函數(shù)out多個(gè)返回值問(wèn)題

    C#函數(shù)out多個(gè)返回值問(wèn)題

    這篇文章主要介紹了C#函數(shù)out多個(gè)返回值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C#使用XML文件的操作詳解及示例

    C#使用XML文件的操作詳解及示例

    XML是 Extensible Markup Language 的簡(jiǎn)稱,用于存儲(chǔ)和傳輸數(shù)據(jù)的可擴(kuò)展標(biāo)記語(yǔ)言,它被應(yīng)用在數(shù)據(jù)交換、數(shù)據(jù)存儲(chǔ)、Web服務(wù)、網(wǎng)絡(luò)協(xié)議等場(chǎng)景,本文給大家介紹了C#使用XML文件的操作詳解及示例,需要的朋友可以參考下
    2024-10-10
  • C#實(shí)現(xiàn)簡(jiǎn)易畫圖板的示例代碼

    C#實(shí)現(xiàn)簡(jiǎn)易畫圖板的示例代碼

    這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)易畫圖板的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C#實(shí)現(xiàn)文件上傳及文件下載功能實(shí)例代碼

    C#實(shí)現(xiàn)文件上傳及文件下載功能實(shí)例代碼

    文件上傳文件下載需求在項(xiàng)目中經(jīng)常會(huì)遇到,今天小編給大家分享C#實(shí)現(xiàn)文件上傳及文件下載功能實(shí)例代碼,需要的朋友參考下吧
    2017-08-08
  • C#操作Byte數(shù)組和十六進(jìn)制進(jìn)行互轉(zhuǎn)

    C#操作Byte數(shù)組和十六進(jìn)制進(jìn)行互轉(zhuǎn)

    這篇文章介紹了C#操作Byte數(shù)組和十六進(jìn)制進(jìn)行互轉(zhuǎn)的的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

西林县| 台湾省| 兴山县| 郁南县| 集安市| 浦东新区| 建昌县| 太湖县| 乌苏市| 商南县| 朝阳市| 东源县| 改则县| 贵阳市| 开鲁县| 彩票| 中超| 仁布县| 潞西市| 高唐县| 中卫市| 棋牌| 宿松县| 通河县| 定陶县| 苍溪县| 秦安县| 北宁市| 平泉县| 衡水市| 洪湖市| 定陶县| 正蓝旗| 金阳县| 新沂市| 高台县| 延寿县| 万载县| 赣州市| 泰来县| 澎湖县|