IOS:
IOS:使用shell命令打包并上传Itunes
Unity3d:
Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot)
Unity3d:在屏幕边缘显示其他玩家方位
Unity3d:命令行打包Android
Unity3d:命令行编译IOS
Unity3d:使用Jenkins自动编译打包IOS(只能打包Development)
Unity3d:使用Jenkins自动编译打包IOS(打包Ad-hoc,上传itunes)
需要注意两个点x坐标相等的情况:
如果两个点x坐标相等,则该直线与y轴平行;
如果两个点y坐标相等,则该直线与x轴平行;
如果两个点x,y坐标都相等,则不是线,是同一个点。
需要注意a1和a2相等的情况:
如果a1和a2相等,b1和b2不相等,则两条直线平行,无交点;
如果a1和a2相等,b1和b2相等,则两条直线是同一条线,无交点;
如果a1和a2不相等,b1和b2相等,则两条直线不平行,有交点,相交于y轴b1点或b2点;
如果a1和a2不相等,b1和b2不相等,则两条直线不平行,有交点。
注意是 线段 ,不是直线。
通过(1)求得端点所在的直线的方程;
通过(2)求得这两条直线的交点。
这里需要判断下交点是落在线段内,还是线段外(虚交点):
如果交点x坐标小于线段1的左侧端点的x坐标,或者交点x坐标大于线段1的右侧端点的x坐标,则该交点落在线段1外,即线段的延长线上,是个虚交点。
反之,是线段1的正常交点。
Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot)
首先,playerA是一定在屏幕内的,这里需要判断playerB是不是在屏幕内。
如果playerB是在屏幕内,则无需后面的处理。
如果playerB是在屏幕外,让我们继续。
然后,把playerA和playerB的世界坐标转换成屏幕坐标系里的坐标,分别记作A和B。
注意 :这里有个容易钻进去的误区,就是很容易想到去计算方向向量,即( BA )。计算完之后又会自然而然的想着用这个向量去处理上面的问题,最后会发现,自己已经进入了一个深坑里,深深的把自己的思维给圈住了,即使偶尔换个方向思考,比如求交点的方式,还是容易被这个向量给迷惑,总想着去用这个向量去解决,尽管这个向量在这个方式里没啥卵用。
这时,因为A点在屏幕内,B点在屏幕外,所以线段AB一定与屏幕的某一个边框有一个交点( 实交点,非虚交点 )。
这个交点的位置就是我们需要放置方位指示器UI的位置了。
注 :实交点,即交点位于线段上;虚交点,即交点位于线段的延长线上。
屏幕有4个边框,所以我们要先找出这四个边框线段各自拥有的端点坐标。
这里需要注意,A和B两个点是在屏幕坐标系上,线段AB与屏幕边框的交点也是位于屏幕坐标系上。
而方位指示器UI是放在Canvas上的,位于Canvas坐标系内。
所以在计算之前要先做坐标系转换。
这里有两个转换方式:
注意:后面用到的知识在文章 Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot) 中有详细说明,遇到问题可自行查阅。
先把A点和B点转换到Canvas的坐标系内:
cA = (Ax CanvasWidth / ScreenWidth, Ay CanvasHeight / ScreenHeight)
cB = (Bx CanvasWidth / ScreenWidth, By CanvasHeight / ScreenHeight)
再找出Canvas的四个边框线段对应的端点(左下角是原点):
左侧边框端点:lbP(0, 0) 、ltP(0, CanvasHeight) ;
底部边框端点:lbP(0, 0) 、rbP(CanvasWidth, 0) ;
右侧边框端点:rbP(CanvasWidth, 0) 、rtP(CanvasWidth, CanvasHeight) ;
顶部边框端点:ltP(0, CanvasHeight) 、rtP(CanvasWidth, CanvasHeight) ;
有了线段cAcB和Canvas的四个边框线段,根据上面的数学知识,可以轻松求得线段cAcB与Canvas某一个边框的交点,我们记作点P。此时点P位于Canvas的坐标系内。
最后把方位指示器UI在P点显示出来即可。在文章 Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot) 的最后有相关知识,请自行查阅 _ 。
现在线段AB的两个端点有了(即A、B点),下面再找出屏幕的四个边框线段对应的端点(左下角是原点):
左侧边框端点:lbP(0, 0) 、ltP(0, ScreenHeight) ;
底部边框端点:lbP(0, 0) 、rbP(ScreenWidth, 0) ;
右侧边框端点:rbP(ScreenWidth, 0) 、rtP(ScreenWidth, ScreenHeight) ;
顶部边框端点:ltP(0, ScreenHeight) 、rtP(ScreenWidth, ScreenHeight) ;
有了线段AB和屏幕的四个边框线段,根据上面的数学知识,可以轻松求得线段AB与屏幕某一个边框的交点,我们记作点P。此时点P位于屏幕的坐标系内。
然后把交点P转换到Canvas的坐标系内:
cP = (Px CanvasWidth / ScreenWidth, Py CanvasHeight / ScreenHeight)
最后把方位指示器UI在cP点显示出来即可。在文章 Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot) 的最后有相关知识,请自行查阅 _ 。
在项目中使用ScrollView来滑动Item,然后item上挂着特效,这个时候如果滑动区域到达mask区域外,item里的信息被裁切隐藏,但是特效不会就想做一个把特效一起裁切掉的方法。
首先我们要知道信息是怎么被mask裁切掉的。
被裁切主要是Material信息里增加了Stencil信息。
这样在UI绘制的时候就会进行模板测试。这里就不具体介绍模板测试了,就只是简单讲述一下。
模板测试就好比一个画出一个矩形,渲染的时候会对矩形里的像素点进行测试,只有满足模板条件的像素点才能保留,不满足的像素点将被抛弃掉。
现在我们只需要按照裁切信息的想法去让特效也被裁切掉就好了。
当我们的特效加上上来后,先是获取Canvas,在获取他的StencilDepth,当StencilDepth大于0,修改特效原本的Material成我们特制的就好啦。
将上面的脚本加载在我们的粒子上,运行游戏的时候有可能会出现下面的情况
这个提示是因为我们这个粒子的shader上缺少stencil方面的变量,只需要在对应的shader里添加就可以了。
添加完后可以查看shader变量里会有这个几个,这样才可以成功的添加Stencil信息。
如果你做到这步你的粒子还是没有正确的被裁切,需要在粒子中选择Render里的Masking选择 Visible inside Mask
如果上一步 *** 作后你还是没有看到你的粒子显示在正确的区域内,你可以设置粒子的sort值。
本质上其实这里的裁切就是让特效去参与模板测试从而达到我们想要的裁切效果。
Q:我们图标现在是制作成图集后再使用的,但是当图标数量很多的时候,图集的膨胀就很厉害了。对此我们的做法有两种:1)拆为多个图集;
2)不再使用图集转而使用UITexture来使用。请问UWA有什么建议呢?
使用图集的主要缺点在于内存较大,且管理不便;而使用UITexture的主要缺点在于产生的Draw Call较多(每个UITexture都会产生一个Draw Call且无法拼合),影响运行效率。因此,如果同时出现在屏幕上的图标不多,即UITexture所产生的Draw Call数量不大时,可以考虑直接使用;但如果图标数量较多,且目前项目的Draw Call已经较高,那么我们依然建议继续使用图集,按照一定的规则拆分为若干组,从而将 Draw Call控制在较低的范围内。
Q:粒子系统的Prewarm主要用来做什么的,这个怎么优化呢?
ParticleSystemPrewarm的出现表示当前加载、激活或者首次渲染的粒子系统开启了"Prewarm"选项,而开启该选项的粒子系统在加载后会立即执行一次完整的模拟。以“火焰”为例,Prewarm开启时,加载后第一帧即能看到“大火”,而不是从“火苗”开始逐渐变大。但Prewarm的 *** 作通常都有一定的耗时,建议在可以不用的情况下,将其关闭。
Q:我们为了降低像素填充就限制了最大分辨率,但是发现限制之后NGUI的字体显示就变得模糊了。是否可以避免NGUI字体模糊呢?下图是我们在小米5上测试得到的结果:低分辨率下文字就模糊了。
从开发团队提供的上看,小米5上的低分辨率用的是983x552,相当于将原来的画面的四分之一分辨率。此时,降低分辨率的做法可以理解为把983x552的纹理拉伸后贴到1920x1080的屏幕上,而“贴”的过程还会涉及到重新采样,因此造成模糊是正常的,而不仅仅是文本。只是文本的边缘对比度较高,拉伸后变糊的现象会更加明显。
我们建议尝试通过RenderTexture来控制不同内容的分辨率,对于UI部分尽量不要把分辨率降得太低。
Q:打包AssetBundle的时候,我发现切换场景时,即使打同一个场景的AssetBundle,它们的Hash值都是不一样的,可能是什么原因造成的呢?
在不同的场景下打包同一个资源或场景时,如果出现AssetBundle的差异,目前很可能是Shader Stripping造成的,其原理可见文档: >
以上就是关于Unity3d:在屏幕边缘显示其他玩家/敌人/物体的方位全部的内容,包括:Unity3d:在屏幕边缘显示其他玩家/敌人/物体的方位、Unity UI通过Mask裁切粒子特效、[Unity优化] unity性能优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)