Lgx 的 Unity Tips(2018.6-2018.12)

  1. 在Unity中,已知一个矩形的原点(Pivot)以及其长宽,求其对应的四个顶点

其实质就是模型空间中的顶点转化到世界空间中,通过线性空间转换的方式实现,可以通过矩阵乘法的方式来实现。不过可以用Unity提供方法来实现。本来是想通过Transform的InverseTranformPoint来实现的但是并用不了,感觉Unity的很多API都不太好用(可能我对这个API的理解不对),后来通过一个“测试体”的方式来实现的代码如下。

static GameObject testGo;
    static Vector3[] GetRectPoints(Transform transform,float length,float width)
    {
        Vector3[] rect = new Vector3[4];
        rect[0] = new Vector3(-length/2,0,width/2);
        rect[1] = new Vector3(length / 2,0, width / 2);
        rect[2] = new Vector3(length / 2,0, -width / 2);
        rect[3] = new Vector3(-length / 2,0, -width / 2);
        if (testGo == null)
        {
            testGo = new GameObject("TestGo");
              
        }
        for (int i = 0; i < 4; i++)
        {
            testGo.transform.SetParent(transform);
            testGo.transform.localPosition = rect[i];
            rect[i] = TrimVector3(testGo.transform.position);
        }
        return rect;
    }

2.Unity HDR两种mode R11G11B10 与FP16,但是在R11G11B10 下会导致相机渲染的RenderTexture的alpha值过曝。我们的项目中用ShadowCamera渲染RenderTexture来实现影子效果,这样当启用R11G11B10 模式的HDR后由于alpha值

3.Unity数据序列化。序列化类前需要加[System.Serializable],并且类里面的字段(Field)前加[SerializeField](注意是字段而非属性!!),在Editor类的OnInspectorGUI()方法,用以下代码套进行序列化属性更新

        EditorGUI.BeginChangeCheck();
            //bla..bla..bla...
        if (EditorGUI.EndChangeCheck())
        {
            serializedObject.ApplyModifiedProperties();
        }

4.在Unity2018下,视角空间坐标viewSpacePos  = mul(UNITY_MATRIX_MV, v.vertex)的z值与无法正确表达深度值(表现为无线性灰度渐变,灰度区域极小),我用length(viewSpacePos )来代替深度值,实现较好的雾效。

 

5.2018用的是DX11,所以老的shader中如果有的话要删除此段代码

#pragma exclude_renderers d3d11

6.

图所示的水边缘效果。水的shader已经有了,但是我们石头的shader需要改造一下。对此shader的具体原理有时间再来研究,但是加一个Fallback "Diffuse"就有OK了。其中原理希望知道的朋友提点一下,在此谢过~

7.材质mat文件中的guid必须与shader的meta中记录的guid一致,否则Unity将找不到shader,最终给出小粉红(错误shader)

8.定义Shader关键字时,中间下划线不可省 #pragma multi_compile __ LGX_LightMap_On。(至少Unity2018是这样的)。通过此种方法定义的关键字没法打包到游戏里。[Toggle(USE_LIGHTMAP)] USE_LIGHTMAP("USE_LIGHTMAP", Int) = 0 #pragma shader_feature USE_LIGHTMAP

9.使用Unity的CombineMeshes有顶点数限制65 536(2的16次方),否则将会产生拉伸。

10.序列化注意事项 :1.类前加[System.Serializable],2.字段前加[SerializeField],注意是字段而非属性3.  

 public override void OnInspectorGUI()
{
    MyController test = (MyController)target;
    EditorGUI.BeginChangeCheck();
       ///
        ///Edit the UI
        ///
     if (EditorGUI.EndChangeCheck())
     {
         serializedObject.ApplyModifiedProperties();
     }
}

11.shader语义的使用也不是TEXCOORD通吃一切的,比如我们定义VertexData(传给Vertex Shader的数据)如果要用到顶点normal、tagent用来做法线贴图效果,用“通用的”TEXCOORD可能就有问题(出现模型黑化)应该将语义改为NORMAL、TANGENT

12.在Android平台下,如果Sprite的Format如果是 RGBA Compressed ETC2 8bits透明图片是黑的。这个不知道是为什么但是由于黑的很难看所以我们将Format改成Alpha8透明图片就OK了。

13.

这个没有信息的莫名其妙的报错应该是跟系统外部环境有关系。2018.3默认是.Net 4.x环境,改为.Net 3.5就好了。考虑到出问题的机器是美术的机器不用打包等我就直接改了。

14.DOF效果将会导致模型的合并解除(从Frame Debugger中可以看出)从而大批量增大DrawCall,所以手机上想要用DOF效果怎么办?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值