跳到主要內容

發表文章

目前顯示的是 4月, 2024的文章

ILRuntime 性能優化

在使用 ILRuntime需要注意 1) 減少使用 foreach, Dictionary, IEnumerable 的調用會產生額外 GC 2) 減少調用主工程包含enum參數的函數, 因為在調用的時候會進行值得轉型, 產生額外 GC 3) ILBinding需要執行, 否則runtime性能會差很多 升級 ILRuntime 到 2.x 版本 在 1.6 版本打包Android(package Hotfix.dll by Release)跟 Editor 下的性能非常糟糕,所有的消耗都在 GC 上面,後來升級 2.x 版本就好了 從更新後重新生成 ILBinding 發現修改了 IList 改成 using AutoList,這部分應該是優化了GC回收效率

Cocos 構建 error Java executable not found at

建構資源打包到 app 後發現個問題, 遊戲啟動就黑屏, 看了日誌如下 沒看出甚麼問題重新打個包, 發現一個奇怪的錯誤, 但之前都是這樣打包也沒注意這個情況 查看了系統配置, JAVA_HOME、PATH 都是正常的, 改其他版本 Java 也沒用, 最後發現 Cocos  這個配置是配置到 java 安裝目錄而不是 bin 目錄, 修改如下就好了

Cocos app 運行錯誤 [ERROR]: E/ ERROR: Uncaught TypeError: Error 6903, please go to.....EngineErrorMap.md#6903 to

  打包 apk 測試遇到奇怪的問題,  [ERROR]: E/ ERROR: Uncaught TypeError: Error 6903, please go to https://github.com/cocos-creator/engine/blob/develop/EngineErrorMap.md#6903 to see details., location: src/cocos-js/cc.js:0:0 官網說這是資源加載有問題, 測試了確定不是加載不到, 是在後續流程使用clone出錯 public static createEffect ( path : any , cb : any , parent : any ) {      this . loadRes ( " /gamePackages/effects/ " + path , Prefab , function ( err : any ,           prefab : any ) {           if ( err ) {                cb ( ' err ' , null ) ;                return ;           }           / /實際是這裡出錯           var node = instantiate ( prefab ) ;           if ( ! parent ) {            ...

Animation Image.Sprite 使用無效

 今天用了animaiton編技能效果, 上次使用已經是 2013年的時候了, 測試了下就上手, 但奇怪的是 image.sprite 的更改一直無效, 可以看到 image.sprite 上面已經紀錄了不同 frame 下的 sprite, 但 run 起來就是無效 https://forum.unity.com/threads/whats-the-difference-between-animation-and-animator.288962/ 查了下發現不能用老版 animation 必須改用 animator, 因為 ugui.image 是在老版後面才出現的功能, unity 沒有回頭去更新 animation 功能, 下面我們就來新增新版本試試看 老版本跟新版本區別在創建流程不同跟添加 component 不一樣 老版本是在 GameObject 新增 Animation Component, 然後開啟 Windows -> Animation -> Animation, Create 新增 Animation Clip, 這樣就是使用 animation 運行 如果要搭配 animator, 則 GameObject 無須新增, 直接開啟 Windows -> Animation -> Animation, Create 新增 Animation Clip, 查看 unity 會新增 animation clip 跟  animation controller 兩個檔案並且 GameObject 是新增了 Animator Component, 在這個情況下去編輯 Image.Sprite 就正常

com.unity.render-pipelines.universal 版本不支持 跟場景混亂

 測試某個插件導入到項目中出現問題, 一般這個問題是因為版本不匹配造成的, 因為直接比對了兩項目的 package 將差異 "com.unity.render-pipelines.universal": "10.6.0", 加入目前項目就出現這個問題 需要查詢 com.unity.render-pipelines.universal 對應 unity 版本,  在官網的插件中選擇版本下拉清單可以查看到對應 unity 版本 隨便改成了 12.0.0 版本, 目測服務器沒有這個版本 查看 Package Manager 顯示是 not found 再切回去官網查目前最新 12.1.15, 但還是 not found 後來打開 Package Manager 查詢支持, 名字是 Universal RP, 版本 12.1.7 執行 import import 完成後出現錯誤, 場景變紫色 Shader error in Couldn't open include file 'Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl'. at line 59 這是URP升級造成的, 生成一個URP Asset如下 開啟 Player Settingg -> Graphics, 將 URP Asset 拖拉近來, 再回到場景就好了 參考: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@12.1/manual/index.html https://blog.csdn.net/q764424567/article/details/133927994

5212 凌網 漲停

5 快到520總統就職日子了, 4月底最近的股票是起起落落, 當然也有美國不降息造成的資金回攏問題, 資金回攏亞幣暴跌, 美元兌換台幣來到歷史新高, 本來去年提前把美元定存贖回換台幣就是為了亞幣上漲再換美元的, 結果事實跟預料果然有出入.... 今天買的股票 5212 凌網 漲停了, 新聞也沒看到甚麼消息, 不過從成交量來看總感覺是有人在洗盤面, 如果沒有更好的基礎面因素, 估計後續營利到10-20%也可以賣掉了

處理ascii批量轉utf8

 由於電腦轉換了編碼為 utf 發現 vs 打開後不少檔案出現轉換提示, 可能是原本開發時直接在 vs 中新增 .cs 文件的緣故, 因為不透過 unity 新增 .cs 文件估計是參考系統編碼, 所以不少文件編碼都是 ascii 格式, 為了解決這個問題弄了個批量轉換工具, 大致如下吧 需要先安裝 chardet 工具 $ pip install chardet  代碼如下: import os import chardet root_path = r"g:\OlgCase\bbm\source\Unity\Assets\Hotfix" count = 0 for path, subdirs, files in os.walk(root_path): for name in files: if not name.endswith('cs'): continue fn = os.path.join(path, name) print(fn) f = open(fn, mode='rb') content = f.read() f.close() result = chardet.detect(content) if result['encoding'] == None: print('error') continue print(result) if (result['encoding'] != 'UTF-8-SIG' and result['encoding'] != 'UTF-8' and result['encoding'] != 'utf-8'): print('process, encoding:' + result['encoding'] + ", fn:" + fn) if result["encoding"] == "GB2312": result[...

AS 下載 gradle 速度慢

 Android Studio 執行 Sync Gradle 時非常慢, 這時候在下載 gradle-{}.zip 可以開啟 vpn 但速度還是很慢, 需要修改源路徑, 開啟 gradle-wrapper.properties 把 https\://services.gradle.org/distributions 替換成其他源 替代的源 https\://mirrors.cloud.tencent.com/gradle 這樣速度就快多了 https://blog.csdn.net/moresi/article/details/136206437

Android Studio 亂碼處理

 編譯打包 apk 出現了亂碼錯誤 1、Android Studio 選擇 Help -> Edit Custom VM Options, 新增如下 -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 切換到 Android 安裝路徑下 {path}\Android Studio\bin\studio64.exe.vmoptions 一樣加入上面兩行 2、Android St udio  選擇 File -> Setting, 設定 Global Encoding, Project Encoding 為 Utf-8, 勾選 Transparent native, 如下圖 3、Editor / Console 設定如下 Android Studio 點 File -> Invalidate Caches, Invalidate and Restart 測試還是無效 4、切換到系統設定-> 語言, 選擇其他時間和區域設定 切換 管理 -> 更改系統區域設定 勾選 Beta, 使用 Unicode UTF-8 提供語言支持 再重啟 Android Studio, 測試發現亂碼好了

compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

繼續上個打包, 又出現錯誤, 如下  Cause: com/android/build/gradle/internal/ide/DefaultAndroidProject has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 這個意思是說編譯代碼裡面或是引用的庫有55.0的版本, 但編譯環境的是 52.0的版本 查看了下 52 的是 Java8, 55 的是 Java11版本 安裝新版本並且更新 PATH, JAVA_HOME 環境變數後查看版本, 已經是新版本了 點開 Project Structure, 選擇 Module, 查看 Source Compatibility 發現是 Java8, 按下鍵只有 1.6、1.7、1.8 可以選擇, 強制填入 VERSION_1_11 會出錯。 這個跟 build.gradle 的 compileOptions 是一樣的, 修改也沒用 查看下 Android Studio 版本, 更新新版 android studio 這是更新的版本 查看 module 的 java 版本, 執行 Sync Gradle 成功了

Gradle sync failed: No matching variant of com.android.tools.build:gradle:8.0.2 was found.

上個cocos項目打包解決了問題之後又遇到了 sync gradle 問題, 這個問題找了有點久, 網上有說重啟 android stuido, 也有說改 gradle 版本的, 測試了都不行, 把 gradle 改成 7.0.2 也是一樣的錯誤, 後來仔細看了錯誤信息, 重點應該是在  The consumer was configured to find a runtime of a library compatible with Java 8 索性去下載最新版本 java11, 結果還是沒用, android stuido 引用的還是系統 java8 路徑, 發現 android studio 引用的不是系統 Path 或是 JAVA_HOME定義, 點開 File -> Project Structure, SDK Location 這邊可以設定對應的 Java 版本, 設定了 Java11 再執行 Sync Gradle 就可以了

Gradle's dependency cache may be corrupt, Re-download dependencies and sync project

cocos creator 3.8.2 編譯 android 項目 編譯項目執行 sync gralde 出現下面錯誤 Failed to open zip file. Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network)   需要找出出問題的 gradle, 切換到項目底下 gradle-wrapper.properties 點擊查看下載的 gradle 版本 切換到下載的用戶路徑 然後把目錄給刪除掉, 在切換回 android studio 再次執行 Sync Project with Gradle 可以了

unity Sprite Editor 無法修改 Sprite

今天遇到一個奇怪的問題, 將素材用 texture pack 導入到 unity, 要使用 Sprite editor 設定 border, 發現左下角這個素材一直點不到, 不管怎麼點綠色的選取都會選到最上方的素材, 而且這時候會發現有兩個綠色選取框, 正常的情況應該是像右側圖一樣. 測試換圖發現就是某幾個素材有毛病, 一開始以為是 alpha 間格太小, 調整了 texture packer 設定還是沒用, 最後想說自己修改 sprite 設定看能不能解決問題, 結果發現了奇怪的地方 Sprite Editor 修改的配置最終是在 Atlas_CardPK.png.meta 裡面的, 而 texture packer 導出的是 Atlas_CardPK.tpsheet, 修改這個沒有任何效果 而在 Atlas_CardPK.png.meta 發現了出問題的地方, 如下圖, SpriteID: 00000000000000000800000000000000, InternalID: 0 這時候把 SpriteID 自行修改附值, 修改沒有重複的隨意值如下 切換回 unity 開啟 Sprite Editor 隨便修改一個值點 Apply , 再切回去 Atlas_CardPK.png.meta 發現 unity 已經自動修改 SpriteID, 之後 texture packer 再重新生成倒出資源都不會有問題 這個問題應該是 unity temp 緩存的 uuid 有問題才會造成 texture packer 匯出資源無法獲取正常 SpriteID, 只要生成正常了就好了  00000000000000000800000000000000