- unity微信小游戏,使用自己编写的屏幕后处理shader,真机出现花屏、闪烁、噪点,模拟器中正常
1. 我的电脑系统为 windows11 2. Unity Hub 版本 303.0-c9 3. Unity版本2022.3.49f1c1 4. 创建一个Mobile 2D Template的项目 5. 从这里安装了 https://gitee.com/wechat-minigame/minigame-tuanjie-transform-sdk.git WXSDK(0.1.23) 6. 编写shader,shader中的逻辑极其简单,直接返回纯白色 7. 创建一个材质引用此shader 8. 编写C#脚本,定义OnRenderImage函数,据我所知此函数用于屏幕后处理,在OnRenderImage使用刚刚创建的材质进行屏幕后处理,将此脚本挂到主相机节点上 9. 如果一切正常,屏幕应该显示纯白色 10. 将项目转换为微信小游戏,全部使用默认设置,不做任何修改 11. 使用微信开发者工具打开此项目,微信开发者工具版本为 Stable 1.06.2409140 12. 游戏在微信开发者工具的手机模拟器上运行正常,但是使用真机调试的时候出现了花屏 13. 调试用的手机为Android手机,型号为Redmi K50 Ultra,系统为Xiaomi HyperOS 1.0.3.0.ULFCNXM 14. 微信版本为8.0.55 15. 今天是2025-01-06 谁能帮我看一下啊,我太难了 项目里只有这两段代码: [图片] 转换微信小游戏: [图片] 使用微信开发者工具打开项目,运行正常: [图片] 使用真机调试,花屏,闪烁,噪点 [图片] 将此脚本挂到主相机节点上: using System.Collections; using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] public class MyPostProcess : MonoBehaviour { public Material postProcessMaterial; // 用于后处理的材质 void Start() { } void OnRenderImage(RenderTexture src, RenderTexture dest) { if (postProcessMaterial == null) { Graphics.Blit(src, dest); return; } Graphics.Blit(src, dest, postProcessMaterial); } } 这是屏幕后处理材质使用的shader: Shader "THT/MyPostProcess" { Properties { _MainTex ("Camera Content", 2D) = "white" {} // 摄像机内容, unity会将摄像机内容传递到_MainTex } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct vert_in { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct frag_in { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; frag_in vert (vert_in v) { frag_in o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (frag_in i) : SV_Target { return fixed4(1.0, 1.0, 1.0, 1.0); } ENDCG } } }
01-06 - unity微信小游戏,使用自己编写的屏幕后处理shader,真机出现花屏、闪烁、噪点,模拟器中正常
1. 我的电脑系统为 windows11 2. Unity Hub 版本 303.0-c9 3. Unity版本2022.3.49f1c1 4. 创建一个Mobile 2D Template的项目 5. 从这里安装了 https://gitee.com/wechat-minigame/minigame-tuanjie-transform-sdk.git WXSDK(0.1.23) 6. 编写shader,shader中的逻辑极其简单,直接返回纯白色 7. 创建一个材质引用此shader 8. 编写C#脚本,定义OnRenderImage函数,据我所知此函数用于屏幕后处理,在OnRenderImage使用刚刚创建的材质进行屏幕后处理,将此脚本挂到主相机节点上 9. 如果一切正常,屏幕应该显示纯白色 10. 将项目转换为微信小游戏,全部使用默认设置,不做任何修改 11. 使用微信开发者工具打开此项目,微信开发者工具版本为 Stable 1.06.2409140 12. 游戏在微信开发者工具的手机模拟器上运行正常,但是使用真机调试的时候出现了花屏 13. 调试用的手机为Android手机,型号为Redmi K50 Ultra,系统为Xiaomi HyperOS 1.0.3.0.ULFCNXM 14. 微信版本为8.0.55 15. 今天是2025-01-06 谁能帮我看一下啊,我太难了 项目里只有这两段代码: [图片] 转换微信小游戏: [图片] 使用微信开发者工具打开项目,运行正常: [图片] 使用真机调试,花屏,闪烁,噪点 [图片] 将此脚本挂到主相机节点上: using System.Collections; using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] public class MyPostProcess : MonoBehaviour { public Material postProcessMaterial; // 用于后处理的材质 void Start() { } void OnRenderImage(RenderTexture src, RenderTexture dest) { if (postProcessMaterial == null) { Graphics.Blit(src, dest); return; } Graphics.Blit(src, dest, postProcessMaterial); } } 这是屏幕后处理材质使用的shader: Shader "THT/MyPostProcess" { Properties { _MainTex ("Camera Content", 2D) = "white" {} // 摄像机内容, unity会将摄像机内容传递到_MainTex } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct vert_in { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct frag_in { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; frag_in vert (vert_in v) { frag_in o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (frag_in i) : SV_Target { return fixed4(1.0, 1.0, 1.0, 1.0); } ENDCG } } }
01-06