Unity3D Custom Render Texture Shader 编译到低版本 Shader model 环境

写好的 Custom Render Texture 的 shader 在打包的时候报出了一个错误:

[Unity] Player export failed. Reason: Shader error in 'Hidden/MyCustomRenderTextureShader': 'asuint' : no matching overloaded function found at ***/CGIncludes/UnityCustomRenderTexture.cginc(189) (on gles)

查资料发现 asuint 这个函数是在 Shader Model 4 (SM4) 才开始支持。
然后稍微看了一下 cginc 里边的代码,发现只有一个地方用到了这个函数——是把浮点类型的 primitive ID 转成 uint 类型。

OUT.primitiveID = asuint(CustomRenderTexturePrimitiveIDs[primitiveID]);

这个 primitiveID 是 update zone 的当前正在处理的索引,而我目前并没有使用很多 update zone 来实现效果的需求,所以决定尝试一下,直接将 float 类型强转成 uint 。

OUT.primitiveID = (uint)(CustomRenderTexturePrimitiveIDs[primitiveID]);

操作步骤:

  • 在自己的工作目录下创建一个自己的 CustomRenderTexture 的 cginc ,也就是新建个文本文件,把后缀改成 .cginc。
  • 把 UnityCustomRenderTexture.cginc 中的代码全部复制到自己新建的 cginc 中,并且按照上面代码修改。
  • 别忘了修改一下头部的宏定义名称 #ifndef UNITY_CUSTOM_TEXTURE_INCLUDED 跟默认的做一个区分。
  • 在 shader 代码中引用我们自己的 cginc ,就可以用了。

Unity3D UGUI 基础布局

play-sharp-fill

1. 轴点 (Pivot)
作为控件的“轴”,在控件状态改变时对最终布局产生影响。比如,旋转的时候控件就以轴点为中心旋转,调整尺寸或缩放的时候轴点会固定在原位置。

2. 锚点 (Anchor)
Anchor 看起来的样子是四个相对的三角形。Anchor 决定了当前控件与父控件的位置关系。控件的 Rect Transform 的坐标 Pos X 和 Pox Y 就以 Anchor 为原点。也就是 Pivot 会放在 Anchor + (Pos X, Pox Y) 的位置上。当父控件状态(旋转、缩放、移动等)发生变化时,控件会保持这个关系跟随父控件。
在 Anchor 选择面板,按住 Shift 选择会同时将 Pivot 设置在 Anchor 选择的相同的位置;按住 Alt 选择会将控件位置同时停靠在 Anchor 位置。如果要同时将 Pivot 和位置放在 Anchor 点,就同时按住 Shift 和 Alt。

3. 尺寸自适应
也可以选择自动伸展的 Anchor 比如,全屏或者 X 轴或 Y 轴方向自动伸展。这个时候在 Rect Transform 中的坐标或(和)尺寸设置会变成 Left Right Top Bottom 。这些值是相对 Anchor 自动伸展方向的距离。这个概念是非常有用的,可以实现控件相对父控件同比例缩放。具体效果看我撸的视频会比较清楚一点。

RSS
Follow by Email
YouTube
YouTube
Pinterest
fb-share-icon
LinkedIn
Share
VK
Weibo
WeChat
WhatsApp
Reddit
FbMessenger
Copy link
URL has been copied successfully!