关于IL2CPP在Xcode下增量编译

栏目: C++ · 发布时间: 6年前

内容简介:这是第128篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。UWA 问答社区:answer.uwa4d.comUWA QQ群:465082844(仅限技术交流)

这是第128篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群:465082844(仅限技术交流)

编译

Q1:最近在研究加速打包问题,发现IL2CPP生成代码之后每次Xcode都是全量编译(直接Build而不是Clean+Archive),我参考 这里 看了下,并对比了下,如果C#代码没有变化,生成的CPP代码的内容确实不变。但是重新生成貌似会导致文件修改时间变化或别的属性变化,Xcode依然是所有都编译了一遍,这块有什么经验么?

题主:目前准备用UWA群里大佬说的方法绕开:

“打出的Xcode用svn同步到Xcode打包项目下”—Freshair.

我用dnspy看了下,il2cpp.exe直接修改代价有点大,而且不好维护。用BeyondCompare比较了下,发现其实就> Preprocessor.h和Native文件夹俩修改时间产生了变化...

感谢钱康来@UWA问答社区分享了该问答,欢迎转至社区交流:

https://answer.uwa4d.com/question/5b90ebbb670c1a61c64d6cd3

UI

Q2:我用OnPopulateMesh修改UI的顶点数据,通过Tangent向UGUI的Shader中传递一些数据,C#代码是这样写的:

public class MyRawImage : RawImage

{

protected override void OnPopulateMesh(VertexHelper vh)

{

base.OnPopulateMesh(vh);

UIVertex vert = new UIVertex();
    int vertCount = vh.currentVertCount;
    for(int i = 0; i <vertCount; ++i)
    {
        vh.PopulateUIVertex(ref vert, i);
        vert.tangent = new Vector4(1,0,0,1); // 通过tangent传递数据 -----------------
        vert.color = new Color(1,0,0,1); // 通过color传递数据 -----------------
        vh.SetUIVertex(vert, i);
    }
}

}

Shader代码:

struct appdata_t

{

float4 vertex : POSITION;

float4 color : COLOR; // color 数据 -----------------

float2 texcoord : TEXCOORD0;

float4 tangent : TANGENT; // tangent 数据 -----------------

UNITY_VERTEX_INPUT_INSTANCE_ID

};

struct v2f

{

float4 vertex : SV_POSITION;

fixed4 color : COLOR; // color 数据 -----------------

float2 texcoord : TEXCOORD0;

float4 worldPosition : TEXCOORD1;

float4 tangent : TEXCOORD2; // tangent 数据 -----------------

UNITY_VERTEX_OUTPUT_STEREO

};

v2f vert(appdata_t v)

{

v2f OUT;

UNITY_SETUP_INSTANCE_ID(v);

UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);

OUT.worldPosition = v.vertex;

OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);

OUT.texcoord = v.texcoord;
OUT.tangent = v.tangent; // tangent 数据 -----------------

OUT.color = v.color; // color 数据 -----------------
return OUT;

}

fixed4 frag(v2f IN) : SV_Target

{

return IN.color; // color 数据 -----------------

return IN.tangent; // tangent 数据 -----------------

}

Color数据可以正确获取到,但是Tangent始终是0,似乎UGUI没有将Tangent数据传给Shader。请问下是什么原因,还是代码哪里写的有问题?

见下图:

关于IL2CPP在Xcode下增量编译

感谢钱康来@UWA问答社区提供了回答

该问答来自UWA问答社区,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5b8f6497f8456e3944031084

崩溃

Q3:请教一下,我使用VideoPlayer的时候,Android端调用Stop会闪退的,Unity 版本是5.6.1,大家有遇到过吗?该如何处理呢?

** 关于IL2CPP在Xcode下增量编译

低版本的Unity上VideoPlayer就是不稳定的,容易崩溃。这点我们和Unity官方的技术支持团队确认过,建议升级Unity版本,最好升到Unity 2017,如果不方便可以升到高版本的Unity 5.6 系列。

感谢吴一帆@UWA问答社区提供了回答

该回答由UWA提供,欢迎大家转至社区进一步交流:

https://answer.uwa4d.com/question/5b91f86ba711f261c1677e16

动画

Q4:我想在Animation中无法加入TextMesh.color这个变量,请问该如何实现?需要在动画中修改TextMesh的a值, 但是在mat中修改没法合批。

关于IL2CPP在Xcode下增量编译

经排查发现这个问题是由无法静态合批所致, 提示“Objects are affected by different forward lights”。经进一步测试,发现差异点为在游戏中,场景部件受到点光源照射, ForwardAdd打断合批过程, 如果把点光源屏蔽掉, 能够正常合批。

该回答由UWA提供,欢迎大家转至社区进一步交流:

https://answer.uwa4d.com/question/5b8f431cf8456e3944031080

脚本

Q5:我用GetComponents的API获取GameObject的组件时,有时候获取的顺序不一致,请问这个顺序是由什么决定的呢?

之前没注意过这个问题,但是感觉挺有意思的,所以使用GetComponents和order两个关键词做了一下检索:

https://answers.unity.com/questions/1293957/reliable-order-of-components-using-getcomponents.html

https://answers.unity.com/questions/556932/does-getcomponents-return-the-components-in-the-or.html

https://stackoverflow.com/questions/42375242/unity-getcomponentsinchildrent-return-order

大意应该是——顺序应该是和你在Inspector里看到的顺序一致,但是因为这个顺序是undoc的,所以Unity什么时候改了实现导致顺序变化了并不会知会你。

不知道题主在什么情况下获取的顺序不一致,这个不一致是否是完全相同的状态多次获取结果不一样?总之,我的感觉还是不要让顺序可以影响游戏逻辑为好,毕竟这东西即使当前测试稳定,以后的版本谁知道呢。

感谢贾伟昊@UWA问答社区提供了回答

UWA: 用GetComponents获取的顺序就是Inspector中Component的顺序。如果你在Editor中改变了这个顺序,那么用这个函数API获取的就随之改变了。

该问答来自UWA问答社区,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5b8c0a9f339d267d357c6eb6

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

官方技术QQ群:465082844(仅限技术交流)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员修炼之道

程序员修炼之道

Andrew Hunt、David Thomas / 马维达 / 电子工业出版社 / 2005-1 / 48.00元

《程序员修炼之道》由一系列的独立的部分组成,涵盖的主题从个人责任、职业发展,直到用于使代码保持灵活、并且易于改编和复用的各种架构技术。利用许多富有娱乐性的奇闻轶事、有思想性的例子以及有趣的类比,全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。无论你是初学者,是有经验的程序员,还是软件项目经理,本书都适合你阅读。一起来看看 《程序员修炼之道》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码