2015年11月8日 星期日

【Unity】Vuforia+MMD4Mecanim擴增實境MMD動畫 - スイートマジック


影片連結

試著用最近提到的Vuforia,加上MMD4Mecanim湊出來的動畫,基本上就是借模型、原曲和動作檔,Unity內轉檔後在AR的畫面中播放。

2015年11月5日 星期四

【Unity】初步的AR系統實作(2) - AR專案建置

(此文章使用Unity5.2 32bit版本,Vuforia插件在64bit環境下會出錯。)
【Unity】初步的AR系統實作(1) - Vuforia註冊

在上一篇下載vuforia-unity-5-0-6.unitypackage和資料庫的unitypackage,將這兩個檔案匯入Unity專案。

【Unity】初步的AR系統實作(1) - Vuforia註冊

(此文章使用Unity5.2 32bit版本,Vuforia插件在64bit環境下會出錯。)
【Unity】初步的AR系統實作(2) - AR專案建置

這次來介紹在Unity內實作擴增實境系統的方法,現在網路上已經有許多開發完整的套件,如ARToolKit、Vuforia等等,基本上照著教學做就能弄出初步的功能,今天就以Vuforia作為實作的套件。
如果要使用Vuforia套件,首先我們必須到Vuforia的官方網站註冊。
連結點我。

按右上角Log in,然後Create account now新增帳號,照著欄位資訊打就好,打完送出後會收到驗證用的信,按信裡面的驗證連結,重新登入後就算註冊完成。

2015年11月1日 星期日

【Unity】NPC對話功能測試

(本篇的範例需要使用chrome以外的瀏覽器才可以正確顯示。)
這次來測試NPC的對話,專案當中還有些不夠完整的地方,所以只做功能的展示,做法暫時先不談。
目前是拿滑鼠移動的專案來增加對話功能,靠近能對話的NPC,碰到觸發器時顯示按鍵Z作為提示,按下Z開啟對話視窗。

2015年10月30日 星期五

【Unity】2D背景捲動

2D背景捲動,是以前在製作小遊戲提到的功能之一,在Unity升到5.0後的版本,當時的程式碼寫法和圖片設定也有些改變,這次就來提一下,感謝告訴我這個問題的網友。
Unity-下樓梯遊戲製作(1/3)

當時是這麼做的:
using UnityEngine;
using System.Collections;
public class BackGroundLoop : MonoBehaviour {
    public float speed = 0.2f;
    void Update () {
        renderer.material.mainTextureOffset = new Vector2 (0, Time.time * speed);
    }
}

2015年10月29日 星期四

【Unity】GetTouch參數

這次來談談Unity內的touch參數,touch參數和鍵盤滑鼠一樣,可以從Input下取得座標、觸碰點編號和數量等等。
Unity  GetTouch

2015年10月28日 星期三

【Unity】偵測系統語系並使用JSON檔修改程式文字

這次來談談系統語系的偵測和修改文字,會使用android系統的手機來測試,在Unity的環境下讀取系統語系只需要一行Application.systemLanguage,把它轉成字串印出來在PC平台上看看:
using UnityEngine;
using System.Collections;
public class SettingLanguage : MonoBehaviour {
    void Start () {
        string systemLanguage = Application.systemLanguage.ToString();
        Debug.Log(systemLanguage);
    }
}
顯示Chinese,的確我的電腦系統語系是中文。
systemLanguage

【自製應用程式】骰子

這是前陣子寫的擲骰子模擬,最近買了google play的上架權,就試著把它丟上去,順便拿來做廣告顯示的測試。
載點
自製APP - 骰子

2015年10月27日 星期二

【Unity】編譯可以上傳到google play的APK

前兩天買了google play的上架費,終於可以試著把成品丟到google商店中,這次來談談上傳檔案時遇到的問題。
在Unity的編譯環境中要輸出APK檔,一般狀況下裝好android sdk,設定Player Settings->Other Settings->Bundle Identifier的欄位填好就可以,但這樣產生的APK檔上傳至google play的後台時會看到這樣的訊息:
google play APK

2015年10月22日 星期四

【Unity】動畫系統中的Transform

這次來談談Unity動畫系統中的Transform,在Unity 5.2版本中針對旋轉做了一些調整,剛好解決困擾我很久的問題,就把自己知道的寫一寫。
首先開啟Window -> Animation編輯視窗,按下Add Property可以新增要做動畫的參數,Transform下的數值就是這次要提的內容:移動、旋轉和縮放,按下右邊的+可以新增初始的關鍵影格。
Unity animation Transform

2015年10月21日 星期三

【自製應用程式】擲骰子模擬器

自製的擲骰子手機程式,執行平台是android。
當然拿數字來random也是個方式,但為了追求真實度。選擇用模擬丟骰子的方法。
自製APP - 骰子

自製APP - 骰子

2015年10月11日 星期日

【Unity】JSON檔案儲存

之前提到使用LitJSON來做JSON檔的讀取,這次來做儲存資料的部分,一些前置動作請參考讀取的文章,就不多做贅述。
準備好dll檔,新增寫檔用的Script就可以開始了。

2015年10月9日 星期五

【Unity】JSON檔資料讀取

這次要提的是在Unity內做JSON檔讀取的方法,開始之前需要先了解JSON檔是什麼,這裡就不獻醜交給其他人,以下是參考網站:
了解JSON格式

下面大略提一下怎麼寫:
物件用{}包起來,一組資料含鍵值和數值(key:value),鍵值和數值用:隔開,各組資料之間用,隔開,比如說{"name":"Tim",  "age":18}。
陣列使用[],值使用,隔開,如[1, 2, 3]、["Unity", "JSON", "test"]等等。
當然陣列下也可以包含物件,陣列也可以做為物件的數值,例如{"name":"Tim", "age":18, "item_bag":[{"name":"apple", "price":20}, {"name":"sword", "price":300}, "test"]},item_bag下就包含兩個物件和一個字串"test"

大致了解JSON的檔案後,我們需要讓它能在Unity內被存取,這裡使用LitJSON,開啟下列的網站:
http://lbv.github.io/litjson/
Unity JSON

2015年10月5日 星期一

【Unity】rigidbody物件移動 AddForce與velocity

今天來談帶有rigidbody物件移動的方法,AddForce和velocity。
首先AddForce,是在物體上給予一個方向的外力,是這樣寫的:
using UnityEngine;
using System.Collections;
public class Control : MonoBehaviour {
        private Rigidbody rb;
        void Start () {
                rb = GetComponent ();
        }
        void FixedUpdate () {
                if (Input.GetKeyDown (KeyCode.Space))
                        rb.AddForce (Vector3.right * 10);
        }
}
掛在物體上的script,在按下空白鍵時,給物體一個向右的外力。
實際執行是這樣:
rigidbody, Unity, AddForce, velocity,

2015年9月21日 星期一

【Unity】UI Button事件(OnPointerClick等)

Unity - UI物件測試 玩家名稱輸入
在這篇內容中有提到過按鈕的製作,後來發現Unity有提供EventSystems的介面,就來介紹一下,下圖的結果點我
Unity Button event

【Unity】Update和Fixedupdate 物件碰撞的抖動問題

Update:每一個frame更新時會被呼叫。
Fixedupdate:每一個固定時間frame更新時會被呼叫。

Update在每一個frame都需要處理的狀況,例如移動、計時器、按鍵滑鼠判斷等等都會用到,需要特別提出來的地方是,Update在被呼叫的間隔並不固定。
我們可以在Update內把Time.deltaTime印出來看看,可以明顯看到每秒最後一個frame的結束時間並不相同
Update time

2015年9月14日 星期一

【自製小遊戲】打磚塊

沒什麼特別的,就是個打磚塊。
這次的重點是處理入射角反射角,如ping pong左右兩側牆壁也是同樣的方法。

2015年9月8日 星期二

【免費遊戲素材】角色篇

角色立繪、角色移動圖和戰鬥用敵人圖。
(使用前請注意利用規範)

1.星宝転生ジュエルセイバー
http://www.jewel-s.jp/
這家的素材應該會有人覺得眼熟,台灣有許多商業作有使用他們的免費素材,另外星寶轉生原本為日本商業遊戲作品,用他們的素材時規範也會相對嚴謹,巴哈有利用規約的中譯,點這裡
MaterialCharacter

另外下載連結可能有點難找特別標示一下。
MaterialCharacter

【免費遊戲素材】系統篇

系統相關的就比較難整理,大致上就是按鈕、介面和對話框等素材。
(使用前請注意利用規範)

1.ひみつ
http://uros.web.fc2.com/frame.html
廣告很多,而且推測很久沒更新了,但系統畫像那邊有整套的系統按鈕可以用。
MaterialSystem

【免費遊戲素材】背景篇

最近手邊增加許多素材來源,整理一下:
(使用前請注意利用規範)

1.背景写真補完の会
http://masato.ciao.jp/haikei/furemu.html
世界觀以現代背景為主,還包含一些實際拍攝的背景,適合AVG使用,不過有些連結已經失效。
MaterialBackground

google Chrome版本45 無法執行Unity Web Player

就如同標題所提的,Chrome「完全」無法執行Web Player的日子到來了。

現在點開Unity Web Player的檔案應該都是這個畫面,建議你使用別的瀏覽器。

2015年9月2日 星期三

【Unity】UI Scrollbar & Scroll Rect

這次要講的是Unity內UI元件 - Scrollbar和Scroll Rect,用來製作有捲動效果的選單,關於Scrollbar前些日子有寫過一篇,但並不需要那麼麻煩,使用Scroll Rect就可以達到同樣的效果。
(Unity - 捲動選單 scroll list)

這次的結果。

首先我們需要新增GameObject->UI ->Panel或Image,作為顯示的區塊Rect,然後在Rect下新增內容,這裡使用GameObject->UI ->Text。
Scrollbar & Scroll Rect

2015年8月6日 星期四

【Unity】[自製ARPG]見習魔法師pt2

這次是新增HP和MP概念、搖桿介面修改和敵人的傷害測試。

以下是測試影片:

以下素材:
臼井の会:http://usui.moo.jp/frame2.html
ドット絵世界:http://yms.main.jp/index.html
ぴぽや:http://piposozai.blog76.fc2.com/category7-2.html
魔王魂:http://maoudamashii.jokersounds.com/
http://void-project-1.googlecode.com/svn/trunk/Game%20Engines/rpgMakerVX/Graphics/Characters/
http://rmake.jp/published_items/7994

2015年7月9日 星期四

【Unity】射擊遊戲系列(2) 數字人力銀行外包case

這是今天無聊逛逛外包區看到的案子,想說既然都看到就來寫寫看,因為沒有付費會員所以也沒辦法接就是了。
首先開發環境為Unity,目標是完成一款手機上2D射擊遊戲的系統功能不含美術,以下是細節功能:
含三類元件:主角、一般敵人和特殊敵人。
1. 一般敵人從上方生成並往主角位置移動,移動速度可供提案方調整。
2. 主角碰觸到敵人後即死。
3. 主角可左右移動並發射子彈攻擊敵人,特殊條件下子彈可貫穿。
4. 特殊敵人被攻擊到之後會分裂成一般敵人,之後就照著1的規則走。
5. 接案方不必設計美術,可以用方塊代替。

這裡就純粹針對功能做做看。(我一定是吃飽撐著沒事幹才寫這篇文)

【Unity】自製ARPG進度(名稱未定)

上篇


繼上次鍵盤操作之後,這次修改了操作方法,使用螢幕上的虛擬搖桿以及虛擬按鈕,大致上的感覺如下圖:

2015年7月1日 星期三

【Unity】ARPG製作測試

這次拿這陣子學到的東西,做了一個ARPG的測試,由於沒有完成所以基本上沒什麼遊戲性。

2015年6月23日 星期二

【Unity】2D地圖設置插件 2D Tilemapper

(註:在一開始測試Tilemapper時,曾發生Unity當掉後專案損毀的狀況,請事先備份專案或使用新專案嘗試。)
這是在設置背景地圖做到有點煩的時候找到的插件,主要功能是能快速的設置Tile類型的Sprite2D背景。
Tilemapper
Tilemapper

2015年6月17日 星期三

【自製遊戲】放置型養成RPG-冒險者管理人進度報告(11)

這次來報告一下進度,基本上一些細節的調整,並沒有增加什麼重大的系統功能。
首先是遊戲的開頭介面,基於世界觀的想法換了遊戲標題:
自製遊戲進度報告

2015年6月16日 星期二

【Unity】Loading Screen 讀取畫面製作

這次要談的是過場的時候的讀取畫面,在Unity中場景切換時常用的語法是Application.LoadLevel("SceneName"),這種讀取方法在遊戲資源小的時候是非常便捷的方法,但遊戲資源大到一定程度時,使用LoadLevel在資源載入的過程中會有一小段時間畫面是會卡住的,這種時候用一個小過場蓋掉這段時間是很常見的方式。
Scripting a Loading screen in Unity(註:影片連結請注意音量)
以上連結教學就是這次的方法,要做到的效果如下圖:
Loading Screen

2015年6月15日 星期一

【Unity】捲動選單 scroll list

這次要講的是可以捲動的選單,透過UI內的scrollbar加上mask製作。
就如下圖所示,選單可以透過移動bar的位置來改變顯示內容,而在框外的選單內容不會被顯示出來。

2015年6月12日 星期五

【自製小遊戲】仿cookie clicker Idle game - 冒險者公會(2)

這次用先前做的Idle game來做Scrollbar的測試:
Idle game

就如上圖左邊欄位看到的可捲動清單,使用UI的mask+Scrollbar做出來的效果,透過滑鼠左鍵移動Scrollbar可以捲動角色列表,以下是這次的結果:

2015年6月10日 星期三

【Unity】攝影機移動Lerp smoothing測試

(註:Unity會停止回應的話請更新Unity web player,官方載點)
這次試著做了 攝影機移動的Lerp smoothing,,主要的契機是這篇文章:
[GDC 2015] Scroll Back - 2D 捲軸遊戲的攝影機理論與實務

文章內有大量的2D攝影機移動理論,文章當中就提到移動常見的smoothing方法,就試著寫寫看,至於在Unity內Lerp smoothing則是參考這一篇:
Unity腳本:使用Lerp 線性插值製作滑順效果


Lerp smoothing

【自製遊戲】放置型養成RPG-掌中冒險者進度報告(10)

這次一口氣把圖鑑、傢俱和系統音一次搞定,UI的重新調整以及部份的程式碼修改就到這裡。
首先是圖鑑部分:
自製遊戲報告
這部分就是把sprite物件修成Button和Image,其他就是針對UI的程式碼修改所以和先前差別不大。

2015年6月8日 星期一

2015年5月30日 星期六

【自製遊戲】放置型養成RPG-掌中冒險者進度報告(8)

這次是久違的進度報告~
大概在上禮拜天左右下了一個決定,就是要透過Unity裡的UI功能把遊戲場景裡的物件全部做一個調整,以及將不變的數值與玩家可變動的數值做一個大整理。
首先是畫面上方人物狀態,為ActorStateCanvas下的UI物件,含目前血量的文字血條、經驗值的icon文字、金錢的icon文字、背景。

註:ActorStateCanvas下的ActorFace為sprtie物件。
自製遊戲報告

2015年5月23日 星期六

【自製小遊戲】仿cookie clicker Idle game - 冒險者公會(1)

這次做的是Idle game,也就是所謂的放置型遊戲,順便測試UI物件。
遊戲的系統來自cookie clicker,點擊金幣袋增加金錢,透過金錢雇用角色,角色被放置在畫面時會自動回饋金錢,遊戲目標只有增加金錢那麼簡單。
Idle game

2015年5月22日 星期五

【Unity】PlayerPrefs存取中文字

這次要提的是PlayerPrefs存取中文字的問題,用的方法有一點鑽漏洞但並不複雜。
PlayerPrefs.SetString是Unity內存取字串的語法,但是過幾次後發現有些中文字因為編碼的問題在GetString會抓到空白字串,如果中文字串是製作方能自己設定就繞個彎避開就好,但可以讓玩家設定的情況就需要找個方法解決了。
自己查了一下,常見的建議方法多半是將中文字轉成編碼,將編碼存下來,讀取的時候再轉換回來。
所以重點在中文字的編碼轉換,於是找到了這一篇:
http://game.ceeger.com/forum/read.php?tid=5897&fid=2&page=1

文中6樓的將中文字轉換成網址編碼來存取,也就是:
PlayerPrefs.SetString ("playerName", WWW.EscapeURL(inputName));//存檔
playerName = WWW.UnEscapeURL(PlayerPrefs.GetString ("playerName"));//讀檔

不過問題點也是文中其他樓提到的字串長度翻倍。

2015年5月18日 星期一

【Unity】android加速度(acceleration)小測試

這次來提Unity在android上的加速度,可以透過android內加速度感測器(accelerometer)抓到的值來做控制物件等功能。
在asset store內找到一個不錯的範例:
https://www.assetstore.unity3d.com/en/#!/content/8566
accelerometer
StarTrooper

2015年5月16日 星期六

【Unity】UI物件 Canvas設定(1)

這次提的是Canvas的Render 調整,UI物件生成之後全部都是在Canvas之下,設定的好可以處理掉許多解析度的問題。
首先隨便新增一個UI物件,新增後Canvas會自動產生,Canvas產生後點擊Canvas看到Component下有Render Mode:

2015年5月11日 星期一

【Unity】遊戲存檔功能(PlayerPrefs)

這是要談的是遊戲存檔的功能,前陣子在做自製遊戲時是透過PlayerPrefs來進行存檔讀檔,所以就先從PlayerPrefs談起。
PlayerPrefs可以在應用程式內做資料存取的動作,可存取的資料型態為int、float、string三種類型,以下是存檔語法:
PlayerPrefs.SetInt ("儲存名稱I", 整數變數);
PlayerPrefs.SetFloat ("儲存名稱F", 浮點數變數);
PlayerPrefs.SetString ("儲存名稱S", 字串變數);

存好資料以後,若要讀取資料則是:
整數變數 = PlayerPrefs.GetInt ("儲存名稱I");
浮點數變數 = PlayerPrefs.GetFloat ("儲存名稱F");
字串變數 = PlayerPrefs.GetString ("儲存名稱S");

2015年5月10日 星期日

【Unity】UI物件 InputField名稱輸入

這次要做Unity內的UI物件測試,就如標題所寫的要完成的是:
1.玩家輸入名稱。
2.按下確定。
3.顯示輸入名稱。
對自己來說拿GameObject物件做是比較熟悉的方法,不過既然功能都放在那裡就拿來試試看吧。
上圖為這次完成的畫面,至於成品結果點這裡

2015年5月6日 星期三

Unity Web Player在google chrome無法執行的問題

請看這篇:
google Chrome版本45 無法執行Unity Web Player

這個問題困擾自己有一陣子了,而且發生的很突然。
某天用chrome開啟自己的遊戲時竟然叫我安裝Web Player。

起初以為是自己遊戲的問題,但重裝Web Player好幾次,用firefox開又可以正常執行,就確定毛病是發生在chrome身上。
就這樣同時開著chrome和firefox好幾天,真的有點受不了就決定來把問題處理掉。
最後從日本的Unity官方找到解決方法(不要問我為什麼)。
http://japan.unity3d.com/blog/?p=2276

2015年5月5日 星期二

【自製遊戲】放置型養成RPG-掌中冒險者進度報告(7.5)

這次不算太正式的進度報告,主要是大修整個專案的架構,所以就用7.5,也不會有目前遊戲開發的畫面。
之前由於太急著想在投稿日前做完它,導致整個專案在變數命名、物件名稱還有程式架構出了一些問題,這些不先解決後面只會越來越累。
所以在新功能冒出來之前,要把該修的都修一修才能進行下一步。
(1)Project檔案分類和重新命名:
含背景圖(Background)、圖案(Icon)、按鈕(Button)、音效(Music)、資源(Resources)、腳本(Script)、場景(Scene)等資料夾,物件名稱也做了修改。

(2)腳本的變數修改和註解:
變數上在開發初期有太多沒設想到的地方,如裝備設定成三個和新增場景物件的功能,這些都做了修改,另外在預定擴展功能的地方也做了註解。

(3)資源(Resources)的延伸性:
資源引用上先前寫得太死,這次做了修改後不論事之後新增人物、敵人或關卡上都變得比較方便。

大量修改後專案變得清爽看的也舒服,總之這次就到這裡。

2015年5月3日 星期日

【Unity】鍵盤移動控制 - 下

上篇
在上次我們完成方向的控制,接下來把人物移動補上後就完成了。這次的結果點這裡
但在之前先把剩下的方向補上,補完之後就是完整的八方向控制。
透過鍵盤操控mmd4mecanim模型

2015年5月1日 星期五

【Unity】鍵盤移動控制 - 上

文章標題是在三月底開起來的,想不到一欠就是一個月。
這次主題是人物模型的鍵盤方向以及移動控制,這篇上篇主要是講方向的控制,而移動部分會留在下篇,這次的結果點這裡

首先提一下目標,以攝影機為拍攝方向為中心點,在玩家按下鍵盤W鍵時角色面向前方,按下D角色面向右方,按下S角色面向後方,按下A角色面向左方。
攝影機受mouselook控制會做Y軸的旋轉,當攝影機拍攝方向改變時,按下WASD後角色方向會與攝影機座標一致,也就是說不會有按下W角色卻面向左方或後方的情況。

2015年4月28日 星期二

【自製遊戲】放置型養成RPG-掌中冒險者進度報告(7)

今天是4月28日,不但沒有在預定的4月17日完成,截稿日的4月27日也沒趕上。
主要是自己在事前的企劃階段太過草率,造成在開發過程中一直有美術、系統功能方向不確定的問題,常常會造成"接下來不知道該怎麼辦"的狀況出現,另外一點就是自己太怠惰的問題,看開發日誌跟新頻率就知道了(苦笑)。
總之接下來會繼續完成到心目中想像的遊戲全貌為止,把遊戲完成這個目標是不會改變的。
接下來是這陣子的進度。
自製遊戲進度報告

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...