踩坑记录

在这里记录我踩过的坑(长期更新


2017


11月


  • Sublime 3有一个中国魔改版本,插件库和标准版不同步,不要装错了!
    • 删掉重装
  • SVN 不能合并二进制文件
    • 使用Unity插件加锁或者修改之前在组里喊一声
  • 【NGUI】NGUI 滑动条不能滑到头
    • 各个子物体不要有缩放,用size XY来控制大小
  • Unity PlayerPrefers 在PC、Editor上存在注册表里,如果将设置的值存储为单一字符串,设置项改动后存取时可能会发生数据冲突
    • 添加对数据迁移的处理或者将设置保存在不同字段
  • 颤屏效果的实现可以用X和Y方向上同时添加随机性位移
  • 所有设置系统都遵循相似的生命周期:开始-初始化-恢复数据-监听改动-保存改动-结束
  • 【NGUI】NGUI 有两种字体,位图字体和矢量字体bitmapFonttrueTypeFont,改动字体还要考虑是否为动态字体GetComponent<UIFont>().isDynamic
  • 【编辑器扩展】写工具修改项目中的某种资源,改动之后要EditorUtility.SetDirtyAssetDatabase.SaveAssets, 否则预设的改动不能被识别(实际上是改了),这会导致SVN错误
  • 【编辑器扩展】一个动态(编辑器)窗口可以容纳多个标签页(子窗口)
  • 【Lua】lua中,local不等于C# 中的privite,用“.”和“:”调用方法是有区别的,self.和一般变量也有区别
  • 【ulua】插件生成的 C#对Lua的wrap接口代码不一定都是正确的,可能会缺失某些命名空间
    • 暂时没有找到什么地方出了问题,需要手动修改错误
      -【NGUI】ToggleGroup 中的多个开关,默认设置一个为true时自动把其他设置为false,不需要手动遍历(在代码中改也行)
  • 为了保证UI位置的正确性,和效果图一致,可以拿到一份原始大小的效果图,用UGUI做成透明的模板来对位。对位时可以使用Grid组件帮助控制控件间距。
  • 【Lua】在lua中传递方法参数时(类似于方法指针的那种用法,多见于回调函数),要注意调用方式,是点还是冒号,带不带括号,传递错误可能导致方法被调用一次,但是传递本身还是有效的。

12月


  • 【NGUI】一个Scroll View 的内容(Grid)里的子元素,如果想要用拖动的方式控制,则需要每个子元素都挂UI Drag Scroll View 组件
  • 【NGUI】想要用代码控制Scroll View 显示的位置(那个0~1的值),则需要创建一个滑动条物体,并设置为不可见,使用时找到这个物体,找到UI Progress Bar 组件并改变它的value
  • 【NGUI】使用UI Panel 的制作图片蒙版时,图片边缘必须至少留出一个像素的不透明(白色),否则会出现问题
  • 切通道时使用“采样周围四方像素”的方法来缩小图片,会造成比较明显的模糊,虽然网上有些人声称看不出来什么区别
  • 【Unity BUG】Unity3D存在一个祖传的机制性问题,材质在更改shader后原先shader中被赋过值的参数会保留下来,方便下次使用同样名称的参数时能够自动给这个参数赋值。这个机制在提供了方便的同时,会导致搜寻材质依赖项时搜到无用贴图(以前用过的那张),影响通道分离工具运行和AssetBundle打包。
    • 制作一个材质信息清理工具,将序列化后的材质信息作为字段读出,删掉无用字段
  • 在进行数学计算时,很小的小数要注意精度问题,过高的精度会被忽略掉
  • 【NGUI】NGUI中包含一套复杂的坐标系统,需要修改位置时可能需要调用currentCamera.WorldToScreenPoint(from);
  • transform.Translate(); 表示向某个方向移动多远,而不是移动到哪个位置
  • 在接入安卓原生浏览器时,可以拦截传入的URL来处理自定义的协议,例如

            @Override 
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
            {               
                if(url == null) return false;
    
                try 
                {
                    //截取ccjs://back指令,退出浏览器
                    if(url.startsWith("ccjs://b"))
                    {                   
                        WebViewActivity.this.finish();
                    }
                    if(url.startsWith("weixin://") //微信
                          || url.startsWith("alipays://") //支付宝
                          || url.startsWith("mailto://") //邮件
                          || url.startsWith("tel://")//电话
                          || url.startsWith("dianping://")//大众点评
                          //其他自定义的scheme
                      )
                    {
                        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(intent);
                        return true;
                    }
                } 
                catch (Exception e) 
                { 
                    //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
                    return true;//没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
                }
                    WebViewActivity.this.finish();
                }
    
                //处理http和https开头的url
                webView.loadUrl(url);
                return true;
            } 
  • 【shader】RenderQueue 这种参数,在shader中定义过,可是还允许在视口中修改。手动修改后的值在改变shader后会被shader中的设置覆盖,除非没有设置这个参数。。
    • 想要在代码中替换shader时继承这项参数,只能手动读取,缓存,然后再给新shader赋值
  • 【NGUI】UIPanel应该放在最外层,防止和内层控件冲突
  • 【NGUI】要注意碰撞盒的参数,可能会造成点击/触摸事件穿透或被覆盖截取
  • 【NGUI】NGUI中有些操作是需要替换shader的,替换采用的是Shader.Find() 函数,比如UIPanel的图像剪裁操作。这种做法会导致Shader打包进AssetBundle时出现问题,因为Shader.Find() 只能找到编译时存在于首包中的shader。
    • 这里,在图形设置中有一项Always Included Shaders ,这个设置的意思仅仅是你要把什么shader打入AssetBundle中,而且是全部变种(打入Standard PBR Shader会导致大爆炸)。如果你在编译首包时把项目中的shader删掉了,那么这个列表中的项也会变成空,相当于没有向这个列表中添加。
    • 综上所述,这个问题是没有办法解决的,只能避免。
    • 想要通过AssetBundle 热更新 以前从来没出现过的shader也是 可行 的,使用TextAsset 的方式加载shader代码,再进行类型转换。
  • 使用AssetBundle.LoadFromFile()加载本地AssetBundle时,不要使用jar:file:// 协议,使用www加载时才使用这种方式详细说明参考 雨松MOMO 的博客
  • FastJson 中,不要在数组中放入一个对象(面向对象概念中的“对象”,派生于Object的,而不是广义上的对象),然后再试图把它取出来进行拆箱,这样会导致数组识别错误。这种问题可能仅存在于Unity版本的FastJson中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值