Unity: 用Instantiate產生子彈/敵人

在Unity中Instantiate可用來射出子彈 產生敵人 產生特效 可謂妙用無窮 現在來說明一下 如何應用Instantiate射出子彈,並且控制每秒可射出子彈的數量 (手槍,機關槍效果)

使用Instantiate功能做出子彈發射效果 並控制每秒可射出子彈的數量

程式碼如下

子彈發射速率為每秒1發 由spawnRate控制

注意事項

  • Line 2: lastSpawnTime = 0.0; 為float格式, 在Javascript中 如果寫成0 (int整數)跟寫成0.0(float浮點數)是表示不同的資料形態 會產生不同結果
  • Line 8: currentTime = Time.time; 不是Time.DeltaTime

當lastSpawnTime寫成 0 (int整數)的時候 且當spawnRate設定在 0 – 1之間時 (如spawnRate = 0.5) 會產生錯誤結果 子彈會亂射ㄧ通 如下影片

錯誤效果影片:SpawnTimeError1(點我觀看)

當lastSpawnTime寫成 0.0 (float浮點數)的時候 且當spawnRate設定在 0 – 1之間時 (如spawnRate = 0.5) 結果就會正確 子彈會 ”2發/每秒“ 射出

正常效果影片: SpawnTimeCorrect(點我觀看)

 

Bonus:讓子彈只產生一次的方法

(instantiate just once)

3D物件輸出到Unity的設定細節

Maya基本單位設定

  • Maya使用預設的基本單位設定即可
  • Maya單位1=Unity單位1

輸出步驟ㄧ:Maya FBX輸出設定

  • 將物件轉向面對正Z方向(這樣輸出到Unity時就會和Unity基本物件的面向軸向一致)
  • 物件位置歸零
  • 物件坐標歸零
  • 單選此物件 並輸出成Obj檔(這步驟是清除資料用)
  • 開新場景檔(New Scene) 將前面Obj輸入進來
  • 單選此物件 並輸出成FBX檔 設定用預設即可(因為Maya本身就是Y朝上 所以FBX預設也是Y朝上)

輸出步驟二:Unity FBX輸入設定

  • Scale Factor=1 這樣在Maya的大小就會和在Unity的大小相同
  • 沒有動作可以取消動作輸入選項

輸出到Unity所產生的軸向問題

因為在Mac上作業時並沒有安裝Maya或是3dsmax, 所以要把模型檔案輸出到Unity就必需先在Maya/sdsmax轉檔程FBX檔案 然後輸入Unity

平常只是輸出模型貼圖 乍看之下沒什麼問題 但最近在在製作Tower Defense的遊戲 (其中有個重要功能就是砲塔要時時指向敵人的功能) 確遇到一些軸向的狀況

經過比對後 發現雖然在FBX輸出設定上將軸向設定的Y朝上(Y Up)就可以“似乎”解決這個問題 可是仔細一看X卻轉了-90度 這樣會造成砲塔轉動時的軸向不對

後來在3dsmax逐項做了以下幾個測試都還是沒用 分別是

  • Clean Up: Create a Box >Attach to target object
  • Rest Pivot in trasform and scale and set to zero
  • Reset XForm from Utilities Menu and convert to editable poly

解決方式

用Maya輸出FBX檔案 用預設即可

  • 主要事因為在Maya中本身就是Y朝上 和在Unity是相同的
  • (如果Mac裡有裝Maya甚至連FBX轉檔步驟都省了 因為Unity可以直接讀mb檔(Maya Binary))

用Maya/3ds MAx輸出成Obj檔

  • 沒有骨架動作適用

用3dsMAx 2012輸出FBX

如何轉換Unity所支援的字型?

情況

這幾天在調整UI的時候 都是在macbook下測試的 直到今天放到iPad上去測的時候 驚覺怎麼字型沒有用

本來應該是這樣:

但結果卻是這樣:

我檢查了一下:

  • 大小(Font Size)的問題?
  • True Type問題?

發覺這並不是大小(Font Size)的問題

True Type? (因為Unity官方手冊說只支援True Type) 可是我是從Mac的字型資夾抓出來的啊 而且我用的這個”HelveticaLight“也是顯示True Type沒錯啊!?

後來再Google了一下 發覺可能是要再轉換一次

解決方式:將字型(再)轉換成True Type格式

轉換方式很簡單 只要到以下網站去做轉換就好

我是用第一個 還蠻方便#