Unity 2022.1版本的一点经验之谈

      不知道你们在使用Unity中有没有遇到一些奇奇怪怪Bug,总是找不到问题原因。今天也是闲下来想总结一些经验之谈。

1.TextMeshPro InputField组件获取内容时有特殊不可见字符

      之前在做一个手游Demo时,因为是MMO类型的。在做服务器登录模块时,在Client先进行了一次正则匹配。获取用户输入的账号,密码进行正则匹配时发现总是匹配失败。刚开始还以为是正则写错了,但是用Debug打印时又是能匹配上的。后面想了好久也没解决这个问题。直到后面在进行对一些用户的信息进行储存到数据库时,发现了数据库中的一个“?”,肯定知道是有乱码了,而且只有在末尾才有的这个,说明在获取用户输入时处在乱码。后面写了一个字节分析器,结果发现了这几个乱码226 139 128,(我用的是UTF-8编码格式)。之后写了一个方法将这几个字符过滤出来,然后再进行正则匹配时发现就匹配成功了,数据库中也没有乱码了~~

        /**
         * 去掉字符串中的含有特殊字符 226 139 128
         */
        public static string GetStandardStr(string str)
        {
            byte[] bs = Encoding.UTF8.GetBytes(str);
            int leg = bs.Length;
            int k = 0;
            int m = 0;
            for (int i = 0; i < leg; i++)
            {
                byte b = bs[i];
                if (b == 128 || b == 139 || b == 226) ++k;
            }
            byte[] ret = new byte[leg - k];
            for (int i = 0; i < leg; i++)
            {
                byte b = bs[i];
                if (b == 128 || b == 139 || b == 226) continue;
                ret[m] = b;
                ++m;
            }
            return Encoding.UTF8.GetString(ret);
        }

不知道你们有没有遇到这个问题,emmmmm,奇奇怪怪。

2.克隆一个UI后将其设置为某个游戏物体的子物体后位置总是与在编辑时设置的不一样

        这个问题刚开始时总是觉得很奇怪,即使修改localPosition,position都没有,不管怎么修改就是没有。后面在测试时终于发现这个问题的原因了:就是UI的锚点不同导致。由于父物体的布局与子物体不同,将克隆出来的子物体设置为父物体的子物体时导致它的锚点坐标anchoredPosition3D,anchoredPosition位置发生变化,与预制体的不同,因此UI呈现的位置也发生了改变,总是与在编辑器下直接拖动预制体到父物体下面的位置显示不同。解决问题就是在将克隆物体设置父物体后再手动设置一下上面两个值与预制体的值一致即可。

    /// <summary>
    /// 设置克隆体与预制体一致如果有父物体,应该先设置父物体再进行比例,位置调整
    /// </summary>
    /// <param name="prefab">预制体</param>
    /// <param name="clone">克隆体</param>
    /// <param name="parent">父物体</param>
   private void SetCloneAsSameWithPrefab(GameObject prefab,GameObject clone,GameObject parent) {
        Vector3 anchoredPos = prefab.transform.GetComponent<RectTransform().anchoredPosition;
        if (parent != null)
        {
            clone.transform.SetParent(parent.transform);
        }
        clone.transform.localScale = prefab.transform.localScale;//防止变形
        clone.transform.GetComponent<RectTransform>().anchoredPosition3D = anchoredPos;
       
    }

今天就先总结到这里吧,后面有时间再分享一些其他关于Unity开发的一些经验咯。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是使用Unity 2022.2版本URP制作溶解效果的步骤: 1. 在Unity中创建一个新的材质球,将其Shader设置为URP/Lit或者URP/Unlit。 2. 在Asset中创建一个新的Shader Graph文件,并将其设置为URP的Shader Graph。 3. 在Shader Graph中创建一个新的Shader图形,然后添加一个Custom Function节点。 4. 双击Custom Function节点,进入编辑模式。 5. 在Custom Function节点中输入以下代码: ``` void Dissolve (inout SurfaceOutputStandard o, float dissolveAmount, float edgeWidth, float edgeIntensity) { // 计算溶解效果 float dissolve = 1.0 - dissolveAmount; // 计算边缘效果 float edge = fwidth(o.NormalWorldSpace) * edgeWidth; edge = smoothstep(0.0, edge, edgeIntensity); // 应用溶解和边缘效果 o.Alpha = dissolve * edge; } ``` 6. 在Custom Function节点中添加以下参数:dissolveAmount(溶解程度)、edgeWidth(边缘宽度)、edgeIntensity(边缘强度)。 7. 将Custom Function节点的输出连接到材质球的透明度(Alpha)输入。 8. 在Shader Graph中添加一个Property节点,并设置其类型为Float。将这个节点的输出连接到Custom Function节点的dissolveAmount输入。 9. 在Shader Graph中添加一个Property节点,并设置其类型为Float。将这个节点的输出连接到Custom Function节点的edgeWidth输入。 10. 在Shader Graph中添加一个Property节点,并设置其类型为Float。将这个节点的输出连接到Custom Function节点的edgeIntensity输入。 11. 将Shader Graph文件保存,并将其拖拽到材质球的Shader属性中。 12. 将材质球应用到需要进行溶解效果的对象上。 13. 在代码中调整材质球中的dissolveAmount、edgeWidth和edgeIntensity参数,可以控制溶解效果的速度和程度。 以上就是使用Unity 2022.2版本URP制作溶解效果的基本步骤,具体实现可以根据需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Avalon712

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值