分类 Unity 下的文章

上傳 google play 提交版本時出現錯誤

您的應用程式目前採用第 3.0.3 版 play 帳款服務程式庫,但至少須更新至第 5.2.1 版,才能使用 google play 的最新營利功能

這是因為上傳 aab 裡面使用到了 billing 是 3.0.3 版本的, 發現項目並沒有使用 billing 功能索性就刪除掉了

unityLibrary/build.grade

implementation(name: 'billing-3.0.3', ext:'aar') // 刪除

unityLibrary/src/main/AndroidManifest.xml

// 刪除

IL_0066: call System.Collections.Generic.IEnumerable`1<System.Linq.IGrouping`2<!!1,!!0>> System.Linq.Enumerable::GroupBy<System.Int32,System.Int32>(System.Collections.Generic.IEnumerable`1<!!0>,System.Func`2<!!0,!!1>) 

打包了pc版本, 運行時出現錯誤, 查了下 ILRuntime 官方, 總覺得 Linq 似乎沒法用 RegisterFunctionDelegate 解決, 查了網上說的的確只能自己改寫功能

private List<int> getUniqNumList(List<int> nums)
{
    List<int> ret = new List<int>();

    Dictionary<int, int> groupCounts = new Dictionary<int, int>();
    foreach (int num in nums)
    {
        if (!groupCounts.TryGetValue(num, out int oNum))
            groupCounts[num] = 1;
        else
            groupCounts[num]++;
    }

    foreach(int k in groupCounts.Keys)
    {
        if (groupCounts[k] == 1)
            ret.Add(k);
    }
    return ret;
}

#if ILRuntime
    List<int> guess_one = this.getUniqNumList(guess_list);
#else
    List<int> guess_one = guess_list.GroupBy(x => x).Where(x => x.Count() == 1).Select(x => x.Key).ToList();
#endif

打包PC版本

error: Could not set up a toolchain for Architecture x64. Make sure you have the right build tools installed for il2cpp builds. Details:

Internal build system error. BuildProgram exited with code -2146233088.
error: Could not set up a toolchain for Architecture x64. Make sure you have the right build tools installed for il2cpp builds. Details:
IL2CPP C++ code builder is unable to build C++ code. In order to build C++ code for Windows Desktop, you must have one of these installed:
 * Visual Studio 2022 or newer with C++ compilers and Windows 10 SDK (recommended)
 * Visual Studio 2019 with C++ compilers and Windows 10 SDK
 * Visual Studio 2017 with C++ compilers and Windows 10 SDK
 * Visual Studio 2015 with C++ compilers and Windows 10 SDK

Visual Studio 2017 (or newer) is detected using `vswhere.exe` as well as VSCOMNTOOLS environment variables.
Visual Studio 2015 is detected by looking at "SOFTWARE\Microsoft\VisualStudio\14.0_Config\InstallDir" in the registry as well as VSCOMNTOOLS environment variables.
Windows 10 SDK is detected by looking at "SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0\InstallationFolder" in the registry.

Windows 10 SDK is not installed. You can install from here: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/


Unity.IL2CPP.Bee.BuildLogic.ToolchainNotFoundException: IL2CPP C++ code builder is unable to build C++ code. In order to build C++ code for Windows Desktop, you must have one of these installed:
 * Visual Studio 2022 or newer with C++ compilers and Windows 10 SDK (recommended)
 * Visual Studio 2019 with C++ compilers and Windows 10 SDK
 * Visual Studio 2017 with C++ compilers and Windows 10 SDK
 * Visual Studio 2015 with C++ compilers and Windows 10 SDK

Visual Studio 2017 (or newer) is detected using `vswhere.exe` as well as VSCOMNTOOLS environment variables.
Visual Studio 2015 is detected by looking at "SOFTWARE\Microsoft\VisualStudio\14.0_Config\InstallDir" in the registry as well as VSCOMNTOOLS environment variables.
Windows 10 SDK is detected by looking at "SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0\InstallationFolder" in the registry.

Windows 10 SDK is not installed. You can install from here: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/


   at Unity.IL2CPP.Bee.BuildLogic.WindowsDesktop.WindowsDesktopBuildLogic.UserAvailableToolchainFor(Architecture architecture, NPath toolChainPath, NPath sysRootPath)
   at PlayerBuildProgramLibrary.PlayerBuildProgramBase.GetIl2CppToolChain(PlatformBuildLogic platform, Architecture architecture, NPath toolChainPath, NPath sysrootPath)
   at PlayerBuildProgramLibrary.PlayerBuildProgramBase.SetupIl2CppBuild()
   at PlayerBuildProgramLibrary.PlayerBuildProgramBase.SetupPlayerBuild()
   at WinPlayerBuildProgram.WinPlayerBuildProgram.SetupPlayerBuild()
   at PlayerBuildProgramLibrary.PlayerBuildProgramBase.RunBuildProgram()
   at PlayerBuildProgramTypeWrapper.Run(String[] args)
   at Program.Main(String[] args)
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

重新安裝vs2022桌面開發環境工具
93402-394pwj5xvx5.png

開始下載安裝
03284-xemnwtyl3m.png

安裝好之後就行了, 打包還是出問題
51331-72d7eh1jz7e.png

網上找了方案, 說是把下面這段加入項目就行

#if UNITY_EDITOR
using System;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
public class MsvcStdextWorkaround : IPreprocessBuildWithReport
{
    const string kWorkaroundFlag = "/D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS";
    public int callbackOrder => 0;
    public void OnPreprocessBuild(BuildReport report)
    {
        var clEnv = Environment.GetEnvironmentVariable("_CL_");
        if (string.IsNullOrEmpty(clEnv))
        {
            Environment.SetEnvironmentVariable("_CL_", kWorkaroundFlag);
        }
        else if (!clEnv.Contains(kWorkaroundFlag))
        {
            clEnv += " " + kWorkaroundFlag;
            Environment.SetEnvironmentVariable("_CL_", clEnv);
        }
    }
}
#endif // UNITY_EDITOR

這個問題在版本 Unity 2020.3.42f1, 2021.3.14f1, 2022.1.23f1, 2022.2.0b16 and 2023.1.0a19.修復

[https://forum.unity.com/threads/unity-2022-1-22f1-with-il2cpp-not-working.1359580/][1]

將轟炸超人從 gui 系統改成使用 sprite rendere 過程中遇到不少問題, 圖片 PPU 設定為 100
25108-ajerx3kbff7.png

Camera size設定為3.6,原本是在 1280x720比例下製作, Camera 場景Y軸高度預設為 11~12 個 Chunk , Camera size 代表著 Y軸高度的一半, 所以設計為 0.5 x 720 = 360, 因為PPU為100, 所以 Camera.size = 360/100 = 3.6
03065-jh5dkx32d1o.png

編輯器下結果
79742-ixsdexiitfa.png

遊戲執行出來的效果
75417-djttkdpukkv.png

場景裝飾物件調整位置, 這張背景圖大小 1440 x 960, 所以物件位置在 0.5 x 1440 = 720 / 100 = 7.2
57605-bbe95xluho6.png
94084-a7hpgwjyj7.png

另外 sprite renderer 的 width、height 沒有效果的, 所以改為 (0, 0), 另外把 ugui tiled 模式改成 Continuous 模式, Height 設定為 4.8, 因為 scale = 5 所以 tiled 高度為 0.5 x 960 = 480 / 100 = 4.8。
13924-4yuyjabqmzm.png

另外 sprite render 顯示層級是依靠 position.z 決定的, 值越小顯示層級越高, 在地圖邊緣用了兩個插件物件, 樹木跟樹葉底, 這時候就要設定posZ值了, 將樹木 posZ 設定為 -1
84992-buyohgvkxl.png
53710-6ojpw4ujman.png

在編輯器裡面有很多非常大的框, 這是文字的 transform 沒有對應修改, 把 width, height 改成(0.6, 0)
28005-vha62iqvh7.png
35051-o5of8duwji.png
28413-sfgw6ix7gbe.png

使用spine二進制格式, 勾選導出二進制並勾選紋理打包
93618-v9e9m7yj74n.png

將 .skel 改為 .skel.bytes, .atlas 改為 .atlas.txt 複製到 unity
71823-ynr7mp8vlo.png

unity會生成對應 SkeletonData
66608-atpi7mk5wgj.png
28829-gkguk4icth.png

導入unity之前需要安裝 spine-unity runtime, 下載地址如下
https://zh.esotericsoftware.com/spine-unity-download

※ 如果 spine 導出 json 格式, 只要把 .atlas 改成 .atlas.txt 就行了

QA1. 導入spine資源出現白邊
06336-mj04rxrs3c.png

點 S_Character_01_Material 將 Straight Alpha Texture 打勾就好了
57134-iwvsecozwgg.png

測試了 spine 導出 Premultiplied Alpha (PMA) 效果
64978-d9ubwnl9ucl.png

pma效果會有明顯的外邊, 但有的看起來會奇怪
42450-fa0uwa1zdq.png
01134-jrt77vp49m8.png

※ Texture 打包器启用 Premultiply alpha
Unity Texture 设置中禁用 sRGB (Color Texture) 和 Alpha Is Transparency ,
Unity Material 参数中禁用 Straight Alpha Texture

※Texture 打包器禁用 Premultiply alpha , 启用 Bleed
Unity Texture 设置启用 sRGB (Color Texture) 和 Alpha Is Transparency ,
Unity Material 参数中启用 Straight Alpha Texture