日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D实现鼠标选中“高亮”显示功能

發布時間:2023/12/29 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D实现鼠标选中“高亮”显示功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介


  • 基于Highlighting System插件的鼠標選中物體時,使物體高亮顯示。在這個插件的基礎上,改動小部分功能,使物體可以高亮顯示。
  • 在網上有很多這鼠標高亮顯示的相關資料,要么不符合自己的要求,要么符合的效果不滿意。所以基于這個插件,雖然也有些功能不符合本人的需求,不過可以進行少許改動,下次做項目時,在使用到鼠標選中功能時,直接引用這個腳本和插件就OK了。
  • 該文章僅供學習,記錄。不喜勿噴!
    demo效果圖:

    實際項目效果圖1:

    實際項目效果圖2:
  • 二、準備工作


    1、導入Highlighting System插件,或者不導入直接下載本人做好的demo也可以。
    2、在攝像機中添加Highlighting Effect腳本,該腳本必須添加否則Game視口如何顯示物體的高亮,具體如下:

    MouseHighlight腳本是本人自己寫的,功能就是選中物體高亮,不選中就取消高亮。
    3、在場景中隨便拖入幾個物體,如Cube等,必須有碰撞器的物體,為什么要加碰撞器那就是射線的相關知識了。

    4、上述工作做完后,就開始看看主要腳本MouseHighlight.cs了。

    三、實現鼠標選中高亮

    1、在這個插件用有很多顯示高亮的特效,如:SpectrumController.cs、FlashingController.cs等,不過無需使用這么多,只采用一種即可,我采用的是“SpectrumController.cs”這個類來作為高亮顯示的特效。其他特效以及其他功能如圖:

    2、創建MouseHighlight.cs類或者隨意創建一個類

    ****2.1 定義一個變量gameCheck,用于存儲選中的物體

    public GameObject gameCheck;

    ****2.2在Update()里執行的代碼
    主要實現思路是當按下鼠標左鍵時,發射一條射線,當射線照射到物體時,獲取到該物體的對象。然后執行SetObjectHighlight(GameObject obj);該方法下面會講。

    void Update () {if(Input.GetMouseButtonDown(0)) {var ray = Camera.main.ScreenPointToRay(Input.mousePosition);//鼠標的屏幕坐標轉化為一條射線RaycastHit hit;//距離為5//if(Physics.Raycast(ray, out hit, 5)) {// var hitObj = hit.collider.gameObject;// Debug.Log(hitObj);//}//無距離限制if(Physics.Raycast(ray, out hit)) {var hitObj = hit.collider.gameObject;SetObjectHighlight(hitObj);Debug.Log(hitObj);}}}

    ****2.3 設置物體高亮
    這個方法很好理解,如果gameCheck這個變量為空,表示沒有物體被選中,直接使該物體處于高亮狀態;如果gameCheck這個變量與選中的這個變量是一樣的,則使選中的這個物體取消高亮顯示狀態;gameCheck這個變量與選中的物體不一樣的話,把gameCheck這個物體取消高亮顯示,把選中的物體設置為高亮。(如果是多選的話,后面會給出思路介紹)

    /// <summary>/// 設置物體高亮/// </summary>/// <param name="obj"></param>public void SetObjectHighlight(GameObject obj){if(gameCheck == null) {AddComponent(obj);}else if(gameCheck == obj) {RemoveComponent(obj);}else {RemoveComponent(gameCheck);AddComponent(obj);}}

    ****2.4 取消高亮顯示/添加高亮顯示
    **(1)添加高亮顯示
    使物體高亮根據這個插件的Demo,只需要為該物體添加SpectrumController.cs類即可使物體高亮(也可添加其他類,具體可看該插件的demo),但是顯示高亮之后還不行,因為根據該腳本的代碼,他還有閃爍、顏色改變等功能,不過對于我們來說,并沒有必要。

    /// <summary>/// 添加高亮組件/// </summary>/// <param name="obj"></param>public void AddComponent(GameObject obj){if(obj.GetComponent<SpectrumController>() == null) {obj.AddComponent<SpectrumController>();}gameCheck = obj;}

    改動下SpectrumController.cs類中的部分參數,將閃爍(speed)速度設為0,顏色(col)根據自己要求進行自定義改動.

    (2)取消高亮顯示
    取消高亮顯示也很簡單,只需要將SpectrumController.cs腳本和HighlightableObject.cs腳本移出掉即可。HighlightableObject.cs腳本是執行SpectrumController.cs腳本時會添加HighlightableObject.cs腳本。該腳本具體功能就是使物體高亮。
    //Destroy(obj.GetComponent());功能是移出物體的某個組件

    /// <summary>/// 移出組件/// </summary>/// <param name="obj"></param>public void RemoveComponent(GameObject obj){if(obj.GetComponent<SpectrumController>() != null) {Destroy(obj.GetComponent<SpectrumController>());}if(obj.GetComponent<HighlightableObject>() != null) {Destroy(obj.GetComponent<HighlightableObject>());}gameCheck = null;}

    demo下載鏈接

    四、擴展思路


    1、實現多選
    **如果要實現多選功能的話,就不能只定義gameCheck變量了,需要定義一個泛型變量List或者數組,當選中物體時,判斷該泛型是否存在此選中的物體對象,如果不存在則執行高亮功能,并且加入到該泛型中。一般多選都是按住Ctrl鍵+鼠標左鍵,所以你需要設置一個參數,該參數可能對demo并沒有什么影響,但是在真正的項目中就可能會產生影響。
    在Edit->Project Settings->Input下

    將下面選中的這個刪除掉,或者不刪除但是自己要清楚有這么個東西。這個Positive Button的值為left ctrl表示的是按左Ctrl也可實現鼠標左鍵功能。

    2、使用其他選中特效

    總結

    以上是生活随笔為你收集整理的Unity3D实现鼠标选中“高亮”显示功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。