Unity Text Breaking Space

前言 Unity Text 中英混雜導致英文字跳行問題,主要是 Space 字串的問題,可以用 \u00A0 替代 Space。 Code private static readonly string no_breaking_space = "\u00A0"; public static string ReplaceSpace(string context) { return context.Replace(" ", no_breaking_space); } 可以這樣替代全部的 Space。 範例 使用前 使用後

2022-12-03

Oculus Auto Set Build Setting && Build

前言 之前因為遇到多平台功能,要輸出時各個平台 Player Setting 細項設定皆為不同,會因為某些沒有設定導致輸出時出包,所以才寫了一個自動輸出個平台功能。 XR Setting 可以利用這段來新增或移除 XR 裡面的 Oculus 勾選。 private static void SetOculusXRLoader(BuildTargetGroup buildTarget, bool active) { XRGeneralSettingsPerBuildTarget buildTargetSettings = null; EditorBuildSettings.TryGetConfigObject(XRGeneralSettings.k_SettingsKey, out buildTargetSettings); XRGeneralSettings settings = buildTargetSettings.SettingsForBuildTarget(buildTarget); if (active) XRPackageMetadataStore.AssignLoader(settings.Manager, "Unity.XR.Oculus.OculusLoader", buildTarget); else XRPackageMetadataStore.RemoveLoader(settings.Manager, "Unity.XR.Oculus.OculusLoader", buildTarget); } Build 利用這段自動輸出,options 可以設定 BuildOptions.None、BuildOptions.AutoRunPlayer,一般的 Build 和 Build and Run。 private static void BuildRelease(string Path, BuildTarget Target, BuildOptions options) { Console.Clear(); BuildPlayerOptions playerOptions = GetBuildPlayer(Path, Target, options); BuildReport Report = BuildPipeline....

2022-12-01

Unity Project Structure

Unity Project Structure 主要是建立一個自動建立簡易專案資料夾結構。 此參考 UnityProjectTreeGenerator 方法建立資料夾, 使用方式 Tools > Generate Project Structure 必須要設定 Root Name 才能點擊 Create Structure 資料夾結構 |- Assets |- Project Name /// 自己設定 |- 00_Art | |- 00_Profabs | | |- Models | | |- UI | |- 01_Shaders | | |- UI_Shaders | |- 02_Timeline | |- 03_Models | | |- Example_Model | | | |- 3D | | | |- Animation | | | |- Textures | | |- Example_Effect | | |- Textures | |- 04_Scenes | |- 05_UI | | |- Textures | | |- Effect | | |- Textures | | |- Animation | | |- Material | |- 07_Audio | |- 08_Video |- 01_Program |- 00_Scenes |- 01_Scripts |- 02_Tests |- 03_Prefabs |- 05_UI Github

2022-10-05

Unity Open Shader For VSCode

前言 針對 Unity Shader 檔案打開時,使用 VSCode 開啟而不是 Visual Studio,假如預設是 VSCode 則無需使用這功能。 會寫這功能是平常寫 C# 都是習慣使用 Visual Studio,而 Visual Studio 好像沒有針對 Unity Shaderlab 的關鍵字,而 VSCode 則有 ShaderlabVSCode(Free),也因此這樣選擇使用 VSCode。 因為平常開發時都是使用 Visual Studio,想開啟 Shader 時可以直接使用 VSCode 編輯,因此才參考 Sublime Text & Unity Shader,把 Sublime Text 改成使用 VSCode。 環境變數 需要注意環境變數裡的使用者變數的 Path 需要有 VSCode 的路徑 也可以使用 CMD 測試有無環境變數 VSCode CLI Args 根據 Unity 開啟 VSCode Args,可以使用 Process 填寫對應路徑就可以了。 "$(ProjectPath)" -g "$(File)":$(Line):$(Column) startInfo.Arguments = $"{projectPath} -g {fileName}"; Script 詳細的方法可以參考 Sublime Text & Unity Shader。...

2022-08-09

Unity Addressable Load Assets

前言 介紹我使用 Addressable 的讀取、生成、釋放方式。 詳細設定還是可以先觀看官方文件。 Event Viewer 可以利用 Event Viewer 在 Editor Runtime 時,隨時監控記憶體使用情況。就可以很明顯的發現,那些東西是忘記釋放掉的,或者不需要釋放的。 Load Asset IEnumerator InstantiateAsset(string asset) { AsyncOperationHandle<GameObject> async = asset.LoadAssetAsync<GameObject>(); yield return async; GameObject go = Instantiate(async.Result); } IEnumerator InstantiateAssets(string label) { AsyncOperationHandle<IList<GameObject>> async = Addressables.LoadAssetsAsync<GameObject>(label, null); yield return async; for (int i = 0; i < async.Result.Count; i++) GameObject go = Instantiate(async.Result[i]); } IEnumerator InstantiateAsset(AssetReference asset) { AsyncOperationHandle<GameObject> async = asset.LoadAssetAsync<GameObject>(); yield return async; GameObject go = Instantiate(async....

2022-05-04