unity3d UGUI多层级面板显示多个3D模型
当前项目,直接用3d模型放到ui上,由于同时会出现多个界面堆叠,存在多个模型的情况,层级处理相当麻烦。
所以,下面就记录下采用Rendertexture方式显示多模型的策略。
主要的想法就是用一个独立camera获取指定CullingMask的显示,利用Rendertexture获取相机图像,然后再使用RawImamge显示到UI上。
上面的camera,Rendertexture,RawImamge显示单个模型的方式,就不做过多介绍了。下面主要来说一下实现多个模型显示的思路。
1.如图所示,可以将Rendertexture预设成2*3,每个单元格可以存放一个模型。
2.将上面的Rendertexture关联给一个RawImage控件,利用uvRect对Rendertexture进行图像裁切,获取某一个区域的模型成像。
public void SetUvRect(float x, float y, float w, float h)
{
if (raw == null)
{
raw = gameObject.GetComponent<RawImage>();
}
raw.uvRect = new Rect(x, y, w, h);
raw.SetNativeSize();
}
3.管理2*3单元格,给每个单元格保存一个key,如果当前模型不显示了,放入缓存池,并移出2*3位置,将对应的单元格tag设置为空置。
该方法,有点缺点,就是模型图片的分辨率只和相机成像有关,导致预制的Rendertexture高宽过大。后面视情况看看有没有优化空间,当前项目同时显示的模型会超过5个,而大小也接近半屏的,所以设置的分辨率有点大了。
只为记录一下,多个思路。