今天打包的时候遇到一个坑,就是用RenderTexture的时候,在某些手机上会显示黑屏,一查发现这是某些安卓设备才会出现的BUG(奇怪的是那台测试机是鸿蒙系统,懂的都懂)
解决方法也很简单,就是不能用RenderTexture资源,而改成动态代码创建即可解决这个BUG
同时解决了另一个RenderTexture的BUG,就是用RT的时候,Camera里的粒子物体,在RT上显示不正常,解决方法,例子的材质改成用 Moblile/Particels/Additive
另一个问题,除了粒子,发现diffuse之类的cutout材质,如果背后没有其他可渲染物体,则会直接看不见,怀疑是跟shader层级以及cutout的设置有关,目前暂时不知道怎么解决,好在pbr的standard材质里的cutout能正常渲染出来
using UnityEngine;
using UnityEngine.UI;
public class Test:MonoBehaviour{
public RawImage rawImage;
public Camera cam;
private RenderTexture m_renderTexture;
private void Start(){
m_renderTexture=new RenderTexture(512,512,16,RenderTextureFormat.ARGB32);
rawImage.texture=m_renderTexture;
cam.targetTexture=m_renderTexture;
//必须为 CameraClearFlags.SolidColor或CameraClearFlags.Depth,CameraClearFlags.Nothing 时会不显示
cam.clearFlags=CameraClearFlags.SolidColor;
//CameraClearFlags.SolidColor时会有背景色,需要设置背景色透明
Color color=cam.backgroundColor;
color.a=0f;
cam.backgroundColor=color;
}
}
注意:Camera.clearFlags 必须为 CameraClearFlags.SolidColor或CameraClearFlags.Depth,CameraClearFlags.Nothing 时会不显示
CameraClearFlags.SolidColor:会有背景色,需要设置Camera背景色为透明
CameraClearFlags.Depth:不会清除上一次渲染的内容,会出现重叠花屏
使用以上方法将粒子系统制作的特效显示在 UI 时,需要注意粒子系统 Renderer 栏下的 Material、TrailMaterial 使用的 Shader ,在 Unity2019.4.28f1c1 使用 Legacy Shaders/Particels/Additive 的粒子特效无法实现背景透明,改成 Moblile/Particels/Additive
rt的问题:
1.鸿蒙跟部分安卓,电脑上正常,打包后黑屏
2.如果相机渲染无背景,即要渲染出透明背景的RT,半透明的部分会显示不正常
3.解决了上面的可以渲染半透明的背景后,有的图片在正常相机视角下看正常,在RT下看就变成黑色了(用不着A通道并且被填满,colormaskrgb,把A裁剪掉)
4.渲染出来的半透明部分颜色偏淡
5.RT的颜色是16位而不是24位时,由于位数不够导致的显示异常
如果美术给的要有透明效果的图片不存在A通道(一般是用黑色当背景),只有RGB,
则Alpha Source选From Gray Scale,从输入纹理 RGB 值的平均值生成 Alpha。否则默认用Input Texture Alpha,即用纹理自带的。
depth buffer要选24,否则有些东西可能会显示异常,例如那个假影子,就变成怪怪的,像多个多边形组合一样
Blend One OneMinusSrcAlpha 效果最好,但是背景图较亮的时候,特效也会变亮,要注意下