更新圖集造成 image 配置 sprite 變成 missing 的問題
當使用 TexturePacker 打包 Atlas 到 Unity 結果發現原本已經配置好的貼圖都變成了 missing 狀態
查了 Prefab 並沒有變動, 從資源 Atlas_XXX.png.meta 發現如果 nameFileIdTable 裡面對應的 fileId 為 0 則
圖集重新生成就會變成丟失, 要解決問題只能刪除 Atlas_XXX.png 重新生成 .meta , 圖集中刪除圖片沒有效果
當使用 TexturePacker 打包 Atlas 到 Unity 結果發現原本已經配置好的貼圖都變成了 missing 狀態
查了 Prefab 並沒有變動, 從資源 Atlas_XXX.png.meta 發現如果 nameFileIdTable 裡面對應的 fileId 為 0 則
圖集重新生成就會變成丟失, 要解決問題只能刪除 Atlas_XXX.png 重新生成 .meta , 圖集中刪除圖片沒有效果
之前使用了 Unity FixedUpdate 計時器來處理 update, 後來發現在多端之間客戶端計算結果不一致
開始查起這個問題, 查到最後發現是因為客戶端調用 update 次數不一致造成的
由於A端跟B端在FPS上有所差別, A端FPS=60, B端FPS=90, 在這個基礎上調用的 fixedUpdate 次數不一致
造成了B端的怪物行走比A端快
修改思維
(1) 如果不改變 fixedUpdate 造成的次數問題就必須把行走距離改成根據時間差來計算實際距離, 如下
movement = 120 pixels/sec
則 120/50 =2.4/Frame, 每幀需要行走2.4pixels,
如果當前幀跟上一幀時間間距為32 minisec,
則 32 / 20 = 1.6 * 2.4 = 3.84 pixels 為當下幀需要行走的距離
(2) 修改計時器保證每一次 update 都是 20 ms
//將 fixedUpdate 更新頻率拉高到 120 FPS
void FixedUpdate(){
long nowt = this.GetUtcTimeMS();
finish = false;
while (!finish){
if ((nowt - this.updateTs) > 20){
this.updateTs += 20;
//實際調用刷新函式
this.doUpdateLogic(param);
finish = false;
}
}
假設客戶端在一個tick內調用3次doUpdateLogic, 底下調用不可以使用 UTC.Now 去計算時間差值, 不然3次計算
出來的差值都會是最大值
使用 Texture Packer 打包資源到 Unity 結果發現圖片尺寸跟原圖不一樣
查了 Texture Packer 發現在修剪模式選擇了多邊形模式, 修剪到了最接近圖片大小(去掉alpha)
把這個選項改成沒有, 再打包出來的尺寸就是原圖尺寸了
最近修改介面遇到修改後apply,結果 Image 的 Sprite 直接變成 Missing(Sprite)
使用TexturePacker打包資源到Unity使用有時候會出現這個問題, 最乾脆的做法就是把 Sprite 名稱給換掉
用CSS隱藏滾動條
//隱藏垂直滾動條
::-webkit-scrollbar{
width: 0px;
}
//隱藏水平滾動條
::-webkit-scrollbar{
height: 0px;
}
//隱藏全部滾動條
::-webkit-scrollbar{
display: none;
}
#container {
overflow: hidden; //無滾動條功能
}