製作進度
無進度純分享
碎碎念
今天又是加班日,有點累...
請讓我偷懶一天...
不過有一些真的很重要的小東西很想分享一下
_________________________________________
關於一些東西的 Initialize
我們常常會在 Script 內去新增一些 public 的參數
好讓他可以顯示在 Editor 上
但是...
有趣的是,即使你設定 null
「Unity 仍然會幫你把 null 的東西全部初始化並且建立物件」
所以要是拿這些 public 的物件去做初始化的判斷的話..
(因為 OnEnable 會在 Start 之前,所以我本身會拿物件的建立與否做判斷...)
他就會判斷出錯...
除非改成 Private 或者 Protected 這類的不可見層次
_____________________________________________
另外就是關於 Date 時間的概念
在 Unity 中,通常使用 System.DateTime.Now 就可以抓到現在的時間資訊
而用 System.DateTime.Now.Ticks 就可以抓到這個時間的「總百奈秒」的版本
要換算成毫秒就是 / 10000 或者 * 0.0001
不過,我們一般為了不同時區的對時
都會轉換成 UTC 國際標準時間
所以會改抓 System.DateTime.UtcNow 來做統一的計時
但是!
因為 C# 提供的 Ticks 這個參數,起點是從 0000 年1 月1 日開始的
所以!
他會跟一般的時間標準不同
一般電腦在計算時間的標準採用的是 Unix Time
也就是時間的起點是從 1970 年 1 月 1 日開始
畢竟我們網路傳輸會盡可能簡化參數,所以一般都是傳 總秒數 或者 總毫秒數
所以!
資料到了 Unity 這邊都要重新做一次處理
以 總秒數 的資料處理方式大概就像這樣
System.DataTime date = new System.DateTime(1970, 1, 1).AddSeconds(伺服器的秒數);
這樣就可以取得伺服器給予的時間點
如果要取得這個時間點和當前時間的差異可以這麼取
double dTime = (date - System.DateTime.UtcNow).TotalSeconds;
這樣就能取得差異的秒數
___________________________________________
灰階的 Shader
上禮拜興致高昂的在玩 Shader
剛好對灰階很有興趣
就去找了一下算法,很簡單!
在最後 fragment shader 或者 surface shader 回傳 Color 參數 float4 的時候改回傳這個
假設算出來的 Color 命名叫 color
float gray = 0.3 * color.r + 0.59 * color.g + 0.11 * color.b;
return float4 ( gray, gray, gray, color.a );
效果很棒!
好玩!