欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Unity3D培訓(xùn)之實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤

2019-02-21 17:19:32 2167瀏覽

今天扣丁學(xué)堂Unity3D培訓(xùn)老師給大家介紹一下關(guān)于實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤的詳細(xì)介紹,首先我們經(jīng)常會(huì)遇到類似用鼠標(biāo)旋轉(zhuǎn)轉(zhuǎn)盤打開開關(guān)的需求。讓用戶更加真實(shí)的操作設(shè)備儀器。接下來說下我的解決方案。

因?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);



接下來我們要解決的就是旋轉(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)過程中有很多小的設(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;
    }  
  }


以上就是就是關(guān)于扣丁學(xué)堂Unity3D培訓(xùn)之實(shí)現(xiàn)鼠標(biāo)控制旋轉(zhuǎn)轉(zhuǎn)盤的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,在教育領(lǐng)域,AR應(yīng)用已經(jīng)被整合進(jìn)一些教學(xué)法中。不過還需要進(jìn)一步的研究到底AR會(huì)給教師和學(xué)生提供那些具體的益處。AR無縫地融合了虛擬數(shù)字世界和現(xiàn)實(shí)世界,可以將學(xué)習(xí)體驗(yàn)從2D時(shí)代提升到3D時(shí)代,尤其是圖像、地圖和地球儀這類場(chǎng)景。想要了解更多關(guān)于VR和AR方面內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂不僅有專業(yè)的AR培訓(xùn)班供大家學(xué)習(xí),還有與時(shí)俱進(jìn)的課程體系和大量的AR在線視頻教程讓學(xué)員免費(fèi)觀看學(xué)習(xí),快來一起看看吧。

【關(guān)注微信號(hào)獲取更多的學(xué)習(xí)資料】



查看更多關(guān)于“VR/AR培訓(xùn)資訊的相關(guān)文章>>

標(biāo)簽: Unity3D培訓(xùn) VR培訓(xùn) Unity3D在線視頻 Unity3D學(xué)習(xí)視頻 Unity3D視頻教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部