網頁

2018年7月20日 星期五

HoloLens 的 Sharing 功能 (程式碼解說)

本文將仔細介紹微軟網站所提供的 MR Sharing 240: Multiple HoloLens devices [前往]。
我就不仔細翻譯網站所提供的文件,此處我只想做個紀錄,主要是關於程式碼的部分。

目標:我想要用聲控說「play」,讓animator開始執行動作。
            animator 已經事先寫好animator controller,並且指定好條件設定。
            我想讓兩台HoloLens之間,可以同步執行上述這件事情。

HoloLens 更新了!

這兩天繼續使用HoloLens開發軟體,
一台HoloLens突然一副有點當機快壞掉的感覺,
總覺得不知道他在做些什麼事。

2018年7月18日 星期三

如何抓到Camera 的 transform.rotation 在X,Y,Z軸的值

在Unity裏頭的rotation,是一個相當複雜的概念。
直覺來說,我們會想說在X軸上看旋轉個幾度,Y軸上看旋轉個幾度,Z軸上看旋轉個幾度。
但實際上似乎又無法這樣設定。

以下有個特別的方式,既可以保持變數型態是 Quaternion,又可以從我們直覺的方式來做旋轉角度的設定。

2018年7月14日 星期六

將 Unity 專案部署到 Android 平台

這件事情比我想像中還要容易許多,尤其是放暑假後,
因為能專心地改寫程式,所以就一鼓作氣的把Android專案寫完。

我原本寫來部署到HoloLens用的Unity專案,也因為已經將程式架構定下來了,
所以將它改成部署給手機(Sony, Androida)使用,就變地快速許多。

以下整理一下,改寫過程使用到的關鍵網頁資源:

2018年7月3日 星期二

HoloLens 專案的快速測試與開發

誠如我在這篇文章「HoloLens建置(build)與部署(public)」(連結) 所討論的,
一個APP的完整部署流程,大約需要20分鐘,其流程相當耗時,這是不利於程式開發的。


因此,以下介紹四種測試方式,從簡易到完整流程,開發者可依現有軟硬體情況與需求交叉使用。

2018年7月2日 星期一

場景切換後燈光變暗

這似乎是從Unity 5就一直有的問題,
譬如:遊戲結束後要重新開啟場景,但燈光突然變暗。
並不是HoloLens專案特有的問題。

2018年7月1日 星期日

HoloLens 建置(build)與部署(publish)

開始談如何建置與發佈之前,先跟各位介紹一下開發HoloLens時硬體與軟體的邏輯關係。

想要自撰一個HoloLens APP,你的電腦需要先安裝好
1. Unity
2. Visual Studio

Unity是一個可供對3D模型作互動並且撰寫C#語法(或Java語法)的平台,
開發者可在Unity上匯入3D模型,也可以透過Visual Studio撰寫C#語法,
而且Unity與Visual studio所撰寫的C# script之間會有所連動,
藉此就可以依著開發者需求,寫出您所想要執行的功能。

寫好的Unity專案,必須建置(build)出C#的Visual studio專案。
這個步驟對HoloLens app佈署來說是必須的。

最後,再由Visual studio專案進行佈署(deploy),
把寫好的專案佈署到HoloLens眼鏡上。

總結來說,佈署順序是:
Unity → Visual Studio → HoloLens
           ①                      ②

2018年6月29日 星期五

場景切換時等待個幾秒鐘才切換過去

這是書上普遍都會用的方法
我參考Loading new scene after time [連結] 的寫法
改成適合我的專案的code。

解釋一下:
事先寫了名為LoadLevelAfterDelay的IEmumerator
要用的時候,使用StartCoroutine呼叫LoadLevelAfterDelay。

IEmumerator也可以寫一些參數進去,以下的例子是寫sceneName這個參數,決定要切換去哪個場景。


  1. IEnumerator LoadSceneAfterDelay (string sceneName) { yield return new WaitForSeconds(0); SceneManager.LoadScene(sceneName, LoadSceneMode.Single); }
這個指令另外寫到其他function裡面
StartCoroutine(LoadSceneAfterDelay("BaseballMain"));


你也可以寫delay參數,決定要等待幾秒鐘。

  1. IEnumerator LoadSceneAfterDelay (string sceneName, float delay) { yield return new WaitForSeconds(delay); SceneManager.LoadScene(sceneName, LoadSceneMode.Single); }

  2. 這個指令另外寫到其他function裡面
StartCoroutine(LoadSceneAfterDelay("BaseballMain",2));


參考資料 [連結1]  [連結2]


2018年6月27日 星期三

場景切換後按鈕點擊一次變成兩次

我使用HoloToolkit提供的ButtonHolographic這個Button,
並且在裏頭寫了一些我希望Button做的事,
其中該具備的各項功能與參數都已經寫好並測試好。

豈知,在不同場景之間互相切換之後,卻碰出一個詭異到不行的問題。

問題是:明明對button做一次的click,可是他卻變成兩次click

於是只好到處看論壇,找找看是否有人跟我遇到相同問題。
在GitHub論壇[連結],我找到了這篇貼文:InputManager causing UI events to fire twice

這篇貼文與討論,高手如雲。
我最後是用以下這段程式碼解決的。
概念上是這樣的,一旦他偵測到兩個click之間的間隔時間太短,就不執行這個function。
所以第一個click抓到之後,第二個如果時間間隔太近,就離開function。
如此,就如同只發生一個click而已。

private float lastClickTime = 0;
private float debounceDelay = 0.005f;
public void OnInputClicked(InputClickedEventData eventData)
{
  if(Time.time - lastClickTime < debounceDelay)
  {
    return;
  }
  lastClickTime = Time.time;
  // do stuff
}

這個解法是被動式的解法,嚴格說並非求甚解而得,
但短期內還得仰仗HoloToolkit的prefab的前提下,這是最快而且可解決問題的作法。

2018年6月22日 星期五

HoloLens 的 sharing 功能

在網路上可以找到的多人共享功能與文件,少之又少。
所以這個問題花了我頗多時間,才能完全搞懂他的邏輯。

為了解這個問題,主要從三個方向進行: