關於Building - Failed to write file: sharedassets0.assets這可愛的小錯誤。
2016年10月18日 星期二
2016年10月13日 星期四
Unity筆記整理:NGUI ─ UIScrollView製作滑動列表
UIScrollView : 可滑動的UI組件,能展現橫向、豎向列表在可視範圍內。
如需製作複雜的可視區域UI 需要配合使用 UIPanel 與 UIGrid。
2016年9月1日 星期四
8月進度表
Unity研究
- 7/31 ~ 8/06 : APP DEMO、 過場script 、素材構思
- 8/07 ~ 8/20 : MP3音樂分析script
- 8/21 ~ 8/27 : 第一關遊戲demo
2016年8月30日 星期二
Unity筆記整理: C#使用StreamWriter類寫入文件
本篇目的:輸出UNITY內的分析音樂成果,好以製作譜面。
Unity3D中C#使用StreamWriter類寫入文件。除了 使用FileStream類讀寫文本文件,.net還提供了StreamWriter類和StreamReader類專門處理文本文件。這兩個類從底層封裝了文件流,讀寫時不用重新編碼,提供了更文件的讀寫方式。StreamWriter類允許將字符和字符串寫入到文件中,不必轉換為字節,它處理底層的轉換,向FileStream對象寫入數據。
Unity3D中C#使用StreamWriter類寫入文件。除了 使用FileStream類讀寫文本文件,.net還提供了StreamWriter類和StreamReader類專門處理文本文件。這兩個類從底層封裝了文件流,讀寫時不用重新編碼,提供了更文件的讀寫方式。StreamWriter類允許將字符和字符串寫入到文件中,不必轉換為字節,它處理底層的轉換,向FileStream對象寫入數據。
2016年8月22日 星期一
2016年8月6日 星期六
Unity筆記整理: C# 計時器的四種寫法
一、使用Time.deltaTime
定義:
The time in seconds it took to complete the last frame.
一秒內從第1個Frame到最後一個Frame所花的時間,
所以不管電腦是一秒跑60格或者一秒30格、24格,值都會趨近於一。
就結果而言,deltaTime是為了遊戲「公平性」而產生的東西,
因此最常用於位移(translate),但拿來計時也是勉強可以用。
二、Time.time
定義:
This is the time in seconds since the start of the game.
從遊戲開始到現在所使用的時間。
在官方的範例中,該用途為gun reload,防止無限的子彈發射。
只要宣告reload所需的時間,配合Time.time,記錄下一次可以發射的時間,就可以使用,
所以是相當好用的一個計時功能。
三、StartCoroutine
定義:
Starts a coroutine.
啟動一個「協程」。
協程簡言之就是執行一個可繼續、可中斷的函式,
所以我可以告訴程式我要隔幾秒在執行下一行陳述式,
因此可以拿來當做計時計。
而使用yield,宣告就必須為IEnumerator,不然程式會報錯,
這就像宣告int 回傳值要有整數、宣告bool要回傳true/false的感覺吧。
四、InvokeRepeating
定義:
Invokes the method methodName in time seconds.
調用一個方法/秒 。
InvokeRepeating接受三個參數,第一個是方法名,第二個是「第一次調用」要隔幾秒,第三個則是「每隔幾秒調用一次」,與StartCoroutine一樣,是可以中斷的,只要使用CancelInvoke()。
這最常使用在「生出怪物」,像是我可以設定第一波怪10秒後出現,每0.5秒召喚一隻怪物,當然用途也不只這些,也可以配合其他函式創造出不同的用法。
參考網站:http://home.gamer.com.tw/creationDetail.php?sn=2275726
定義:
The time in seconds it took to complete the last frame.
一秒內從第1個Frame到最後一個Frame所花的時間,
所以不管電腦是一秒跑60格或者一秒30格、24格,值都會趨近於一。
就結果而言,deltaTime是為了遊戲「公平性」而產生的東西,
因此最常用於位移(translate),但拿來計時也是勉強可以用。
二、Time.time
定義:
This is the time in seconds since the start of the game.
從遊戲開始到現在所使用的時間。
在官方的範例中,該用途為gun reload,防止無限的子彈發射。
只要宣告reload所需的時間,配合Time.time,記錄下一次可以發射的時間,就可以使用,
所以是相當好用的一個計時功能。
三、StartCoroutine
定義:
Starts a coroutine.
啟動一個「協程」。
協程簡言之就是執行一個可繼續、可中斷的函式,
所以我可以告訴程式我要隔幾秒在執行下一行陳述式,
因此可以拿來當做計時計。
而使用yield,宣告就必須為IEnumerator,不然程式會報錯,
這就像宣告int 回傳值要有整數、宣告bool要回傳true/false的感覺吧。
四、InvokeRepeating
定義:
Invokes the method methodName in time seconds.
調用一個方法/秒 。
InvokeRepeating接受三個參數,第一個是方法名,第二個是「第一次調用」要隔幾秒,第三個則是「每隔幾秒調用一次」,與StartCoroutine一樣,是可以中斷的,只要使用CancelInvoke()。
這最常使用在「生出怪物」,像是我可以設定第一波怪10秒後出現,每0.5秒召喚一隻怪物,當然用途也不只這些,也可以配合其他函式創造出不同的用法。
參考網站:http://home.gamer.com.tw/creationDetail.php?sn=2275726
Unity筆記整理:C# Scripting基本觀念
(Source: Unity官網)
一、Object and Component
一、Object and Component
- active an object
- prefab is an object
- enable a component
- any script under an object is a component
- renderer is a component
- GameObject.Find不能找被隱藏的物件/setActive(false)
二、變數在不同區域(scope)的優先權
A: 在宣告區
B: 在Start( )
C: 在Inspector (在runtime之前/在遊戲開始之前)
優先權 B > C > A
三、Awake( )與Start( )
說明:
Awake()
{
//比Start先被呼叫
//即使在Script component是關閉的狀態下,仍會呼叫Awake
}
Start()
{
//比Awake晚
//必須在Script component已經被啟動(打勾)的狀態下
}
四、Update( ) vs FixedUpdate( )
Update( )
- call every frame
- but interval time between frames is vary
- used for regular updates:
- non-physics objects movement
- simple timers
- receive input
FixedUpdate( )
- call every physics step (called in regular timeline)
- called interval time are constant
- used for adjusting physics (RB) objects
2016年8月1日 星期一
7月進度表【已完成事項】
Unity研究
一 、 script
一 、 script
- 多點觸控、長點擊、一般點擊( click & touch )
- scene轉換機制
- 物體碰撞/旋轉/移動
- follow camera
- button on click
- 解析度調整
二、素材製作
- 背景 10%
- 音樂素材 50%
- 角色 0%
- UI 0% ( 待重做)
2016年7月28日 星期四
Unity筆記整理:NGUI Button事件(二)
這節將介紹3種監聽button的方式,如下:
二、使用UIListener,實現更彈性的監聽
1.同樣先設立Event Controller,創建其script。
2.回到Unity把腳本拖到空物件上,發現可以接受到按鈕事件。
參考網站
http://k79k06k02k.pixnet.net/blog/post/112321943-unity-ngui-(3)-%E2%80%93-button-%E4%BA%8B%E4%BB%B6
- 直接監聽Button事件
- 透過SendMessage的方式,一次監聽多個
- 使用UIListener,實現更彈性的監聽
一、透過SendMessage的方式,一次監聽多個
1.建立一個空物體並命名為Event Controller,讓他來一次監聽多個按鈕事件。
2.把 Button 移動至 Event Controller 下。
3.建立一個 ButtonMsg.cs 腳本
4.從Component->NGUI->Interaction新增Button Message並設置如下,完成。
二、使用UIListener,實現更彈性的監聽
1.同樣先設立Event Controller,創建其script。
2.回到Unity把腳本拖到空物件上,發現可以接受到按鈕事件。
參考網站
http://k79k06k02k.pixnet.net/blog/post/112321943-unity-ngui-(3)-%E2%80%93-button-%E4%BA%8B%E4%BB%B6
Unity筆記整理:NGUI Button事件(一)
本節先敘述NGUI button的使用方式和注意事項。
下節將介紹各種監聽方式。
一、NGUI button 使用方式
如圖所示,可以對其做click 、 drag over 的觸控設定,colors是用來設置按鈕不同狀態的顏色,如果是自製按鈕這項功能可以不予理會。
其中 on click 只能接受滑鼠點擊事件,如果要監聽滑動、觸摸等事件,需要額外加上UIEventTrigger 組件。
最後實行的效果大致如下:
二、注意事項
如果button是設置在NGUI內建的UI layer和UI camera底下,那麼關於UI camera的設置就要額外注意,如下圖:
下節將介紹各種監聽方式。
一、NGUI button 使用方式
如圖所示,可以對其做click 、 drag over 的觸控設定,colors是用來設置按鈕不同狀態的顏色,如果是自製按鈕這項功能可以不予理會。
其中 on click 只能接受滑鼠點擊事件,如果要監聽滑動、觸摸等事件,需要額外加上UIEventTrigger 組件。
最後實行的效果大致如下:
二、注意事項
如果button是設置在NGUI內建的UI layer和UI camera底下,那麼關於UI camera的設置就要額外注意,如下圖:
- 功能
Event Type:用於區分UICamera處理UI事件的對象是UI控件還是三維物體。
Event Mask:可以過濾掉不需要接受UI事件的對象。
Event Sources:指需要處理的事件源,比如iPhone可能只需要Touch,PC平台可能還需要Mouse、Keyboard。
Threshplds:指事件誤差的範圍。
軸和鍵:是指方向鍵/搖桿,鍵盤綁定。
參考網站
http://blog.csdn.net/onerain88/article/details/18963539
http://www.cnblogs.com/qinghuaideren/p/3673493.html
2016年7月27日 星期三
Unity筆記整理:不同解析度的調整(四)
這次要來談以script調整內建GUI和camera的畫面縮放比。
整理自胡亂說‧隨便寫很有用的Blog。
三、Unity 內建 GUI class (OnGUI) 的數值調整
m00: x 軸的縮放比例
m03: 實際畫面上,GUI的 x 軸起始點為從左邊算來第幾個像素(pixel)
m11: y 軸的縮放比例
m13: 實際畫面上,GUI的 y 軸起始點為從上方算來第幾個像素(pixel)
m33: x 軸及 y 軸等比縮放比例的反比,也就是說,數值變大為等比縮小,數值變小則等比放大。
整理自胡亂說‧隨便寫很有用的Blog。
三、Unity 內建 GUI class (OnGUI) 的數值調整
- GUI.matrix 裡面的幾個元素值所代表的功用
m00: x 軸的縮放比例
m03: 實際畫面上,GUI的 x 軸起始點為從左邊算來第幾個像素(pixel)
m11: y 軸的縮放比例
m13: 實際畫面上,GUI的 y 軸起始點為從上方算來第幾個像素(pixel)
m33: x 軸及 y 軸等比縮放比例的反比,也就是說,數值變大為等比縮小,數值變小則等比放大。
- 使 GUI 直接依照螢幕比例改變而跟著自動調整變形
缺點:當設計的 GUI 有旋轉的行為時,看起來就會有點怪異,例如,GUI 上有個圓形的圖需要旋轉,將會變得像是個橢圓形如同橄欖球那樣的旋轉,甚至會破壞掉原本設計的畫面;所以我們除了需要 GUI 能夠依照顯示螢幕的不同而自動縮放之外,還需要使它能等比例縮放並維持以螢幕正中央為基準的位置上。
- 使 GUI 等比縮放在螢幕顯示範圍內
targetAspect: 實際顯示畫面的長寬比
targetWidth: 實際顯示畫面的解析度寬度
targetHeight: 實際顯示畫面的解析度高度
baseAspect: 開發時定義的基礎解析度長寬比
baseWidth: 開發時定義的基礎解析度寬度
baseHeight: 開發時定義的基礎解析度高度
Unity筆記整理:不同解析度的調整(三)
這次要來談以script調整內建GUI和camera的畫面縮放比。
整理自胡亂說‧隨便寫很有用的Blog。
二、鏡頭 Camera 數值的換算調整
整理自胡亂說‧隨便寫很有用的Blog。
二、鏡頭 Camera 數值的換算調整
- 使遊戲畫面直接佔滿整個螢幕畫面
缺點:遊戲畫面可能會被拉長或縮短而使得遊戲物件在螢幕上看起來有些變形
- 使遊戲畫面維持原來比例進行縮放
說明:從官方文件 Camera.orthographicSize 得知 orthographicSize 是檢視空間(viewing volume)的垂直大小的一半,所以,以我們在開發遊戲時設定畫面解析度為 1024*768 這樣的長寬比為例,如果當時將 orthographicSize 設定為 5,那麼檢視空間的垂直大小就是 5 * 2 = 10
公式:
(height)
newOrthographicSize = viewVolumeVertical / 2
=> newOrthographicSize = (targetHeight / factor) / 2
=> newOrthographicSize = (targetHeight / (baseHeight / (baseOrthographicSize * 2))) / 2
viewVolumeVertical: 檢視空間的垂直大小
targetHeight: 目標畫面解析度的高度
baseHeight: 開發時定義的基礎解析度高度
baseOrthographicSize: 開發時定義的 orthographicSize
(weight)
newOrthographicSize = (targetHeight / (factor * (targetWidth / baseWidth))) / 2
=> newOrthographicSize = (targetHeight / (baseHeight / (baseOrthographicSize * 2) * (targetWidth / baseWidth))) / 2
targetWidth: 目標畫面解析度的寬度
baseWidth: 開發時定義的基礎解析度寬度
(simplify)
newOrthographicSize = targetHeight / targetWidth * baseWidth / baseHeight * baseOrthographicSize;
2016年7月21日 星期四
Unity筆記整理:不同解析度的調整(二)
這次要來談以script調整內建GUI和camera的畫面縮放比。
整理自胡亂說‧隨便寫很有用的Blog。
一、自動調整 GUI 縮放比例及位置
缺點:有關 GUI 的程式將會變得更長,需對每個 GUI 的 x、y 座標及寬高乘上這個倍數,使程式可讀性降低。
整理自胡亂說‧隨便寫很有用的Blog。
一、自動調整 GUI 縮放比例及位置
- 利用Screen.width 及 Screen.height取得當前的畫面寬高以求出縮放比例倍數
缺點:有關 GUI 的程式將會變得更長,需對每個 GUI 的 x、y 座標及寬高乘上這個倍數,使程式可讀性降低。
- 將GUI.matrix 及 GUIUtility.ScaleAroundPivot() 加在OnGUI()開頭處
2016年7月20日 星期三
Unity筆記整理:讀取畫面淺談
在Unity中場景切換時常用的語法是Application.LoadLevel("SceneName"),然而若資源過於龐大會導致載入畫面卡住,因此需要用到動態loading的方式。
1.靜態Loading:
讀取場景使用同步的方法就可以,因為是同步方法所以讀取的速度是最快的,也不用更新界面,因為同步執行方法的時候程序在等待讀取結束。
執行Application.LoadLevel(“name”);同步方法來加載你的場景。
2.動態Loading:
讀取的時候界面可以有動畫,場景可以異步加載,那麼腳本上的Update就會每一幀都執行,所以就能做一些動態的東西。
執行 AsyncOperation async = Application.LoadLevelAsync(“MyBigLevel”); 方法就可以異步加載場景。
參考範例
https://jerrard-liu.blogspot.tw/2015/06/LoadingScreen.html
http://www.xuanyusong.com/archives/1427
進階:
設計靈活的無縫場景轉換機制:http://godstamps.blogspot.tw/2014/09/unity.html
1.靜態Loading:
讀取場景使用同步的方法就可以,因為是同步方法所以讀取的速度是最快的,也不用更新界面,因為同步執行方法的時候程序在等待讀取結束。
執行Application.LoadLevel(“name”);同步方法來加載你的場景。
2.動態Loading:
讀取的時候界面可以有動畫,場景可以異步加載,那麼腳本上的Update就會每一幀都執行,所以就能做一些動態的東西。
執行 AsyncOperation async = Application.LoadLevelAsync(“MyBigLevel”); 方法就可以異步加載場景。
參考範例
https://jerrard-liu.blogspot.tw/2015/06/LoadingScreen.html
http://www.xuanyusong.com/archives/1427
進階:
設計靈活的無縫場景轉換機制:http://godstamps.blogspot.tw/2014/09/unity.html
2016年7月19日 星期二
Unity筆記整理:物體漸隱漸出功能
可以透過寫腳本和內建方式成立,方法如下。
- From To 兩個屬性是透明度 從 From 變到 To。
- Play Style 屬性是動畫播放的效果:
- Once 就是只播放一次 透明度從 From ---> To 的過程
- Loop 就是不停的重複 Once 的過程
- PingPong 就是 不停的重複 From--->To--->From 的過程
- Duration 是播放一次動畫所花費的時間,如果是循環播放也可以理解為播放的頻率。
- StartDelay 每一次開始播放動畫前,要延遲的時間。
參考網站
- 【NGUI】 Unity3D 物體漸隱漸顯效果:http://forum.china.unity3d.com/thread-964-1-1.html
- 腳本方式參考:http://forum.china.unity3d.com/thread-560-1-1.html
Unity筆記整理:不同解析度的調整(一)
來自NGUI的內建功能。
- 先產生一個 UI Sprite
- 預設狀態對版面做縮放會產生錯誤所以要將UI Sprite -> Anchors -> Type 切換至Unified。
2016年7月11日 星期一
Unity筆記整理:Camera
一、屬性
- Clear Flags 清除標記
- Background 背景
- Culling Mask 剔除遮罩
- Projection 投射 : 切換攝像機的模擬透視功能。
- Perspective 透視 : 相機將用完全透視的方式來渲染對象。
- Orthographic 正交 : 相機將用沒有透視感的方式均勻地渲染對象。
- Size 大小
- Field of view 視野範圍
- Clipping Planes 剪裁平面
- Near 近點
- Far 遠點
- Normalized View Port Rect 標準視口矩形 :用四個數值來表示這個相機的視圖將繪製在屏幕的什麼地方,使用屏幕坐標系(值0-1)。
- X
- Y
- W (Width) 寬度
- H (Height) 高度
- Depth 深度
- Rendering Path渲染路徑
- Use Player Settings 使用播放器設置
- Vertex Lit 頂點光照
- Forward 快速渲染 : 所有對象將按每種材質一個通道的方式來渲染,如同在Unity2.x中的標準。
- Deferred Lighting 延遲照明 : 所有對象將無照明繪製一次,然後所有對象的照明將一起在渲染隊列的末尾被渲染。
- Target Texture 目標紋理 : 請參考Render Texture,該頁包含了相機視圖的輸出。這個引用屬性將禁用相機渲染到屏幕的功能。
二、tips
- 正交相機適合做3D UI。
- 不能同時渲染評木和渲染紋理。
- Components->Camera Control
- 預設相機腳本每個 UI 畫面都應該另外建立 Canvas,並將畫面內的其他 UI 元件放置在該 Canvas 之下,同時,每個畫面除了 UI 元件之外,還需要使用 Image 製作一個覆蓋全畫面大小的「透明遮擋層」,並放置於其它 UI 元件之上,平常處於 GameObject 被關閉的狀態,當 UI 畫面在進行進場、退場動態時,才將它開啟,這樣可以保護 UI 的 Button 不會被點擊到。
參考網站
unity聖典: www.ceeger.com/Manual
unity UI 範例教學: godstamps.blogspot.tw/2015/06/unity-ugui-ui.html
unity UI 範例教學: godstamps.blogspot.tw/2015/06/unity-ugui-ui.html
2016年7月7日 星期四
Unity筆記整理:Publishing Build
一、Web player streaming
不用全部加載就可以玩第一個關卡,使遊戲速度變快。
不用全部加載就可以玩第一個關卡,使遊戲速度變快。
- 加載一個關卡
Application.LoadLevel("levelName");
- 檢查已完成數據流的關卡,透過CanStreamedLevelBeLoaded()
var levelToLoad = 1;
function LoadNewLevel () {
if (Application.CanStreamedLevelBeLoaded (levelToLoad)) {
Application.LoadLevel (levelToLoad);
}
}
二、進度條
GetStreamProgressForLevel ( )
三、保存進度
防止上一關進度被銷毀,透過DontDestroyOnLoad( )
參考網站
unity聖典: www.ceeger.com/Manual
unity介面與基本操作: www.me.lhu.edu.tw/~tin/2012U/U15_UnityBase.pdf
unity介面與基本操作: www.me.lhu.edu.tw/~tin/2012U/U15_UnityBase.pdf
Unity筆記整理:基本介面
一、使用介面
二、Edit
- Preferences->偏好設定對話框
- Snap setting->設定物件移動距離、旋轉角度、縮放百分比。
- Network Emulation->網路仿真,連網速度的模擬。
- Graph Emulation->圖像仿真,不同顯示卡上的模擬。
三、Toolbar
第一個按鈕式切換軸心點,第二個為局部或全局座標。
四、Game View
- Free Aspect:測試遊戲窗口長寬比。
- Stats:顯示圖型性能。
- Gizmos:顯示所有使用gizmos的組件。(?)
五、Componect
- Mash網格
- Effects
- Physics
- 剛體(Rigidbody)
- 角色控制器(Character Controller)
- 碰撞(Collider) – Box、Sphere、Capsule、Mesh、Wheel、Terrain
- 布(Cloth) – Interactive Cloth、Skinned Cloth、Colth Renderer
- 連接點(Joint) – Hinge、Fixed、Spring、Character、Configurable
- 力量(Constant Force)
- Navigation
- Audio
- Rendering渲染
- Miscellaneous雜項
參考網站
unity聖典: www.ceeger.com/Manual
unity介面與基本操作: www.me.lhu.edu.tw/~tin/2012U/U15_UnityBase.pdf
unity介面與基本操作: www.me.lhu.edu.tw/~tin/2012U/U15_UnityBase.pdf
訂閱:
文章 (Atom)