網頁

顯示具有 HoloLens-UI 標籤的文章。 顯示所有文章
顯示具有 HoloLens-UI 標籤的文章。 顯示所有文章

2019年12月20日 星期五

使用HoloToolkit裡面的UITextPrefab

HoloLens使用過程中,想要呈現Text的時候,
如果使用Unity內建的3D Text,字會顯得模糊,看起來很不清楚。

此時,可以改為使用HoloToolkit裡面的UITextPrefab
詳細操作,請看下列影片。

2018年6月13日 星期三

用script修改button的icon圖示與文字

說實在的,當初寫按鈕功能的時候,劈哩啪啦的在網路上找論壇,找範例。
一下用script修改按鈕 icon圖示,一下子修改按鈕文字(text)。
當時沒有馬上記下來,現在倒是記憶有些模糊了。
趁還沒完全忘記,趕緊記錄下來吧!



      目標:中間這個Play圖示,按下去之後,要改為Stop圖示。
    我使用的是ButtonHolographic這個prefab。
    可以去HoloToolkit-Example → UX → prefabs → ButtonHolographic 找到。






步驟上是這樣的:

1. 事先準備好圖示(ex. play, stop),也許是.jpg 或者是 .png,需事先匯入到asset裡面。

2. 在script裡面寫好全域變數去接,變數型態須為Texture。如上圖1所示。

3. 如上圖2所描寫的,在Unity裡面會顯示PlayIcon, StopIcon欄位,你可以點擊右邊的小圓點(圖3所示),將圖檔指定進去。

4. 在script裏頭寫全域變數btnIcon,變數型態是GameObject,那是預備去接舞台上即將被修改圖示的按鈕。同樣的在Unity介面上也要先把即將被修改的按鈕指定進去。例如:UIButtonSquareIcon。

5. 在script裡面撰寫以下程式碼,就可以把舞台上的按鈕圖示,改為你要的圖示了。

     btnIcon.GetComponent<MeshRenderer>().material.mainTexture = stopIcon;

6. 同樣的,修改按鈕文字的方式,分為以下小步驟:
    (1) 先在script裏頭寫全域變數btnName,變數型態是GameObject
    (2) 在Unity介面上,把舞台上將被修改的text指定進去。
    (3) 用script寫,文字要修改成什麼。以下範例是修改成"Stop"

     btnName.GetComponent<TextMesh>().text = "Stop";


概念整理:
其實需要掌握的是變數型態,以及該類別下的屬性的階層關係。
其餘的就只是把該指定的檔案或文字,指定到正確位置而已。

圖示的參考出處
   → 參考論壇 [前往]

文字的參考出處
  → 參考文件Unity Manual [連結]
  → 參考影片Unity tutorial [連結]


2018年5月31日 星期四

使用HoloToolkit 加入cursor

當我們在舞台上放上物件後,以視線選取物件時,
會需要有個cursor可以黏在物件上,代表視線是否在物體上。

這時候必須使用Cursor這個prefab
請至 HoloToolkit → Input → prefabs → Cursor 取用



把他拖曳到舞台上。

其實拖曳上來就可以使用,但為了培養好習慣,
最好還是整理一下舞台上的東西,把跟I/O有關的東西,一併整理到Managers裡。



有cursor可以使用之後,視線移動到哪裡,cursor就會出現在那裏。
使用上算是相當輕鬆容易的喔!

使用 HoloToolkit 的 button prefabs

HoloToolkit裏頭有一些按鈕UI可以使用,我覺得以下這兩個挺不錯的,就拿來試試。

HoloToolkit-Example → UX → prefabs → ButtonHolographic (這是一個prefab)
HoloToolkit-Example → UX → prefabs → ButtonPush (這是一個prefab)

特別是 ButtonHolographic,很容易修改圖示與文字,以下就特別介紹他的使用方式。

這個按鈕可以修改圖示




按鈕也可以修改文字


使用上算是輕鬆容易的。

但今天使用上遇到一件有點難懂的問題,琢磨了好久才想通處理掉。
問題是這樣的:照理說,紫色的cursor碰到按鈕時會變亮,代表按鈕受到關注。




但不知道為什麼,cursor滑過按鈕,卻無法讓按鈕變亮起來。




猜測應該是按鈕跟舞台在景深方向上重疊,所以cursor無法區分舞台與按鈕。




果不其然,把舞台以及按鈕之間的景深距離拉遠,cursor滑過按鈕,按鈕就可以變亮。




以上作個紀錄!

----------------------------------------------------
後記:
後來,比較熟悉Unity的架構之後,才知道原來是碰撞體(Collider)造成。
視線方向與碰撞體在空間中有交集後,游標(cursor)才能hug在碰撞體上面,並加以顯示出來。

碰撞體是附屬在遊戲物件的component,通常是透明的,
必須點擊後才能修改大小、形狀、位置。
Unity提供的碰撞體很多,有2D,也有3D,形狀上好像還有膠囊狀、矩形狀之類的。

這個場景中的遊戲物件有點多,包含:人物、舞台、按鈕。
人物,有人物的碰撞體;舞台,有舞台的碰撞體;按鈕有按鈕的碰撞體。
這裡所碰到到情況是,這多個遊戲物件彼此間的碰撞體太大,導致互相重疊。

把舞台等物與按鈕的距離拉遠,以致可以判斷視線與碰撞體的交集。
自然,游標就可以顯示出來了。

這個原理,也就是關於視線方向、碰撞、與顯示cursor之間的關係,
後來在寫手機的程式時,英文論壇上有人仔細討論一番,便知道原因了。