unity3d

ShareREC for iOS录屏原理解析

南楼画角 提交于 2021-01-13 03:52:13
文 / 游族网络Mob云平台iOS开发专家 李永超 众所周知,由于iOS系统的封闭性,也出于保护用户隐私的角度,苹果并没有公开的API供开发者调用,来录制屏幕内容。导致许多游戏或者应用没有办法直接通过调用系统API的方式提供录制功能,用户也无法将自己一些玩游戏的过程录制下来分享到其他玩家。基于此,ShareREC应运而生。下面我们从说一下ShareREC的录屏的实现原理。 由于苹果UI是基于不同的引擎渲染,所以目前针对不同的引擎,主要是采用以下几种不同的方式实现: 原生UI。 主要是指UIKit框架下面的UI,即苹果原生UI。其实现方式主要是通过获取当前显示的layer,然后通过Core Graphics将这个layer绘制成UIImage,然后将UIImage拼接成视频。这种做法有个问题,就是每一帧都需要使用Core Graphics来重绘,会造成CPU占用率暴涨,效率非常低。 OpenGL 。 由于 Unity 3D 或 Cocos2d两种引擎,在iOS设备上都是采用OpenGL ES这个底层库实现渲染,所以后面会将两者放在OpenGL中一起讨论。 Metal。 Metal是苹果推出的专门针对iPhone和iPad中GPU编程高度优化的框架。目前Unity 5已经支持64位iOS Metal技术,导出Xcode项目时,可以进行选择

场景检测:雾效、Canvas和碰撞体

巧了我就是萌 提交于 2021-01-12 10:55:52
随着近期的文章 《特效优化2:效果与性能的博弈》 发布,常见的主流项目资源检测规则的知识点讲解就暂告一段落。在此也欢迎大家集思广益,让我们一起将日常开发中可能会遇到的知识点汇总起来,方便大家避开性能深坑。 今天,我们将聚焦 UWA本地资源检测 中和场景相关的检测规则: “移动端场景雾效检测”、“UI子节点数过多的Canvas”和“检测场景中的MeshCollider” ,和大家一起探究在“场景”这个角度下值得关注的知识点。我们将力图以浅显易懂的表达,让职场萌新或优化萌新能够深入理解。 1、移动端场景雾效检测 关于雾效我们不难理解:Unity为开发者提供了一种雾状效果的简单模拟,它能使得场景中离镜头较远的物体呈现出一种朦胧、如同现实中被雾遮挡而逐渐隐蔽的视觉效果。 雾效的应用很广泛,但大部分都是服务于场景中的视觉效果:比如模拟自然界的雾以渲染场景环境;或者以雾的视觉局限性来限制镜头的观察范围,以达到场景元素出现时的突然性等。配合不同的环境场景需求,项目对雾效的要求也不尽相同。 Fog的开启与否是针对于每个场景的,可以通过代码设置,也可以在Window->Rendering->Lighting Settings窗口中设置。 各项参数中比较重要的是Fog Mode,内含Linear、Exponential和Exponential Squared三种模式

Check if a GameObject has been assigned in the inspector in Unity3D 2019.3.05f

前提是你 提交于 2021-01-12 05:12:31
问题 Question: How to check if a public gameObject of a MonoBehaviour has been assigned in the inspector in Unity3D, as the comparison for null (object==null) fails. Concrete Example: I am about to write a generic method for Unity3D, that can be called on any nullable object. It checks if the object is null and if so it writes a Debug.LogError(customMessage) . The Method looks like as follows: public static bool IsNull<T>([CanBeNull] this T myObject, string message = "") { if (myObject!= null)

Check if a GameObject has been assigned in the inspector in Unity3D 2019.3.05f

…衆ロ難τιáo~ 提交于 2021-01-12 05:09:42
问题 Question: How to check if a public gameObject of a MonoBehaviour has been assigned in the inspector in Unity3D, as the comparison for null (object==null) fails. Concrete Example: I am about to write a generic method for Unity3D, that can be called on any nullable object. It checks if the object is null and if so it writes a Debug.LogError(customMessage) . The Method looks like as follows: public static bool IsNull<T>([CanBeNull] this T myObject, string message = "") { if (myObject!= null)

Check if a GameObject has been assigned in the inspector in Unity3D 2019.3.05f

守給你的承諾、 提交于 2021-01-12 05:09:10
问题 Question: How to check if a public gameObject of a MonoBehaviour has been assigned in the inspector in Unity3D, as the comparison for null (object==null) fails. Concrete Example: I am about to write a generic method for Unity3D, that can be called on any nullable object. It checks if the object is null and if so it writes a Debug.LogError(customMessage) . The Method looks like as follows: public static bool IsNull<T>([CanBeNull] this T myObject, string message = "") { if (myObject!= null)

Unity3D网络通讯(五)--Socket通讯之Udp通讯

柔情痞子 提交于 2021-01-11 03:05:12
学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为 2341 字 ,预计阅读6 分钟 前言 上一篇《 Unity3D网络通讯(四)--Socket通讯之Tcp通讯 》我们把Tcp的通讯已经说完了,这篇主要说说Udp的通讯,相对于Tcp通讯,个人觉得Udp通讯要简单的很多,UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。 Udp通讯 微卡智享 后台服务端就不说了,还是用的那个Socket的测试工具,我们直接看Unity中怎么实现。 视窗中增加一个UDP的按钮,然后在Network文件夹下增加一个SocketUdp的脚本。 01 添加属性 实例化这样和Tcp的方式是一样的,主要是加入一个UdpClient,一个IPEndPoint(记录服务端IP地址和端口号) 02 初始化连接 Connect参数主要是开启本地UdpClient,通过传入的服务器IP地址和端口号,我们生成IPEndPoint,用于后面发送数据使用的。 03 发送数据 发送数据也比较简单,将传入的字符串转为byte[]后直接用Send即可,最后一个参数就是我们在初始化中已经创建好的服务器的IPEndPoint。 04 接收数据 接收数据我们采用的也是异步处理,不过Udp本身有可能会存在丢包情况,所以本身也不会去考虑分段接收的问题。

unity 画折线图,饼型图插件

自古美人都是妖i 提交于 2021-01-10 14:04:08
在unity中画折线图,和饼型图等数据分析图是很困难 的一件事,幸好我找到了一个插件很方便的解决了这件事,效果如下图: 折线图,饼型图,等。 运行效果如下: 百度网盘下载地址:链接: https://pan.baidu.com/s/10oLG1Zmffv7ASWG0pvx05w 提取码:lub1 如果链接失效,请留言。 来源: oschina 链接: https://my.oschina.net/u/4397642/blog/4870792

支付宝App 3D动画和小游戏背后的故事

故事扮演 提交于 2021-01-10 04:36:59
3D动画和游戏一直是前端领域的难点,支付宝App从2017年春节推出AR红包开始,一直在Web3D领域进行探索和实践。本文将以亲历者的角度,为你讲述这段不断探索和自我突破的经历。 文 / 曾柏然 很荣幸到了五年陈,我做的工作一直和Web3D相关,从头到尾经历了支付宝Web3D发展。本文把这段经历记录下,从技术和业务两方面分析,支付宝Web3D是如何在集团技术中逐渐上位的,并且尝试推演未来的各种可能性。 初生牛犊不怕虎 2016年底,一款Pokemon go的手机AR游戏爆火,大家开始在现实生活中捕捉自己的宝可梦,AR的概念也因此进入大众视野。 也许是受到Pokemongo的启发,2017年春节,支付宝推出了AR红包,大家扫周围的环境,就能发现朋友藏的红包。产品中红包是一个3D模型,虽然是2016年,但是在支付宝里面做3D动画渲染,这还是第一次。 当年的AR红包是多个团队完成的,图像识别是写客户端代码团队实现的,而红包动画是前端团队实现的。其实当时红包动画是由一位游戏开发大佬通过C代码实现的,但这位大佬所在的团队是前端团队。新春之后,前端自然有发展3D渲染的打算,但是客户端团队出于各种的考虑并不想把AR的3D渲染交出去,所以支付宝当时3D渲染分成两条线发展,客户端做AR和3D渲染技术,而前端开始了真正意义上的Web3D探索,他们的代码是纯净的JS

Unity3D的四种坐标系(转)

浪子不回头ぞ 提交于 2021-01-09 18:10:19
【 Unity3D的四种坐标系 】 1、World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。 2、Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)点, 右上角为(Screen.width,Screen.height) ,Z的位置是以相机的世界单位来衡量的。注:鼠标位置坐标属于屏幕坐标, Input.mousePosition 可以获得该位置坐标,手指触摸屏幕也为屏幕坐标, Input.GetTouch(0).position 可以获得单个手指触摸屏幕坐标。   Screen.width = Camera.pixelWidth   Screen.height = Camera.pixelHeigth 3、ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。 4、绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点, 右下角为(Screen.width,Screen.height) 。 【 四种坐标系的转换 】 1、世界坐标→屏幕坐标:camera.WorldToScreenPoint

Unity3D之OnGUI知识总结

拜拜、爱过 提交于 2021-01-07 08:55:37
相对位置参考 http://blog.csdn.net/sunny__chen/article/details/51323265 自适应屏幕收缩 http://www.360doc.com/content/14/0124/09/12282510_347501909.shtml 一、Label #region 四个角定位 GUI.Label(new Rect(30, 10, 100, 200), "zzzzzz"); GUI.Label(new Rect(30, Screen.height - 50, 100, 200), "zzzzzz"); GUI.Label(new Rect(Screen.width - 50, Screen.height - 50, 100, 200), "zzzzzz"); GUI.Label(new Rect(Screen.width - 50, 10, 100, 200), "zzzzzz"); #endregion 二、Button GUI.Label(new Rect(30, 30, 100, 200), "Button"); GUI.Button(new Rect(30, 50, 50, 50), "这个是一个按钮"); GUI.Button(new Rect(90, 50, 50, 50), text); //带图片带文字的按钮