unity

Unity应用发布如何在本地查看Debug输出?

大兔子大兔子 提交于 2020-01-19 02:34:38
转载于: https://blog.csdn.net/zfsr05255134/article/details/51867323 在使用Unity引擎开发游戏的过程中,我们能将想要看到的内容通过Debug类来输出到Console窗口中,极大的方便了程序的调试过程。但是,我们将游戏发布成对应的平台应用程序后,这些输出还能不能看到呢?如可才能看到这些输出呢?这里我就介绍一种能够将Unity引擎的Debug类的输出写入到本地硬件的方法。 Windows平台: 默认情况下,打包应用到Windows平台,运行程序后,我们能够在“xxoo_Data”文件夹下看到“output_log.txt”文件,这个文件就是用来记录我们代码中调用的Debug类的输出。 其他情况,其实““output_log.txt”文件是可以通过Unity引擎设置屏蔽的。Unity设置项中的“ Use Player Log”项就是控制是否将Debug类的输出写入到本地硬件(PC硬盘)的开关,默认选中。 设置方法“Editor -> Project Settings -> Player -> 选择平台(Windows) -> Resolution and Presentation -> Use Player Log”。当然,为了提高程序的运行效率,在发布程序正式版时,建议关闭这个开关。 Android平台: 默认情况下

Unity重命名所有子物体

為{幸葍}努か 提交于 2020-01-19 00:12:45
直接上代码 using System; using UnityEngine; public class Renamer : MonoBehaviour { [ContextMenu("Rename")] private void Rename() { for (int i = 0; i < this.parent.childCount; i++) { if (this.parent.GetChild(i).name.Contains(this.fromName) || this.toAppend) { if (this.toAppend) { this.parent.GetChild(i).name = this.toName + this.parent.GetChild(i).name; } else { this.parent.GetChild(i).name = this.parent.GetChild(i).name.Replace(this.fromName, this.toName); } if (this.parent.GetChild(i).childCount > 0) { this.CheckChilds(this.parent.GetChild(i)); } } } } private void CheckChilds(Transform t) { for

Unity drawcall批处理

爷,独闯天下 提交于 2020-01-18 23:57:09
一、我们为什么要做DrawCall批处理 什么是drawcall,当我们需要绘制一个物体时,就需要调用底层的图形接口,如OpenGL,DX等;也就是在CPU收集完物体的数据信息后向GPU发起调用的一个过程,过多的drawcall就会造成CPU的性能瓶颈; Unity提供了两种技术来处理 动态批处理:对足够小的网格,它在CPU层自动转换它们的坐标,将许多顶点组织到一起然后一次绘制; 静态批处理:合并静态也就是不需要移动的游戏对象,合并成一个大的网格,然后快速绘制; 两种批处理的方式都各有负面影响,动态批处理使用不当可能会引起CPU瓶颈,而静态批处理则会造成内存性能问题; 二、批处理中的材质设置 只有当游戏对象拥有相同的材质时,他们才有可能进行合批处理,所以,如果想要进行合批,就需要在尽可能多的游戏对象中共享材质; 如果有两个相同的材质,但是它们纹理不同,这时可以通过合并纹理的方式来解决;一旦纹理在同一个图集中,就可以使用单个材质来完成; 如果需要从脚本中来获取材质信息,那么一定要使用Renderer.sharedMaterial,因为Renderer.material会创建材质的拷贝; 三、动态批处理 Unity可以用同一个drawcall自动批处理移动的游戏对象,前提是它们材质相同并满足一定规范;动态批处理是自动完成的; 合批动态游戏对象需要顶点有限制,网格不得多于900个顶点属性

Unity 使用 Spine 动画

纵然是瞬间 提交于 2020-01-18 02:14:54
在 Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。 运行库导入 到 Spine 官网关于 Unity 插件的下载地址 spine-unity-download 直接下载最新的插件包,例如:Spine-Unity 3.6 runtime unitypackage ,然后直接导入工程中。 这种方式是比较常用而且方便的,因为在导入插件核心库的同时,还是导入一些 demo 例子,帮助我们快速上手使用插件的 API ,因此这里我也选择使用第二种方式导入插件。建议新建一个空工程来导入相关 demo 了解插件的使用,而正式工程只导入 spine-csharp 和 spine-unity 两个部分即可。 插件导入步骤 在 Unity 菜单中依次点击:Assets->Improt Package->Custom Package 选中 Spine-Unity 3.6 runtime unitypackage 并导入,去掉 Spine Examples 的勾选(假如需要查看 demo 则点击 All ) 点击 Import 完成导入,导入完成后在工程 Assets 下会多出一个 Spine 目录,表示导入成功。 Spine 资源导入步骤 通常制作好的 Spine 动画导出时会有三个文件: .png 、

Unity移动端性能优化

主宰稳场 提交于 2020-01-18 01:11:04
1.渲染 利用reflect probe代替反射、折射,尽量不用RTT、GrabPass、RenderWithShader、CommandBuffer.Blit (BuiltinRenderTextureType.CurrentActive...) 建立统一后处理框架(bloom、hdr、DOF等)代替多后处理,可以共用模糊函数,减少多次blit;另外要注意RTT的尺寸。 空气折射、热浪扭曲等使用GrabPass不是所有硬件都支持,改为RTT或者后处理来优化。 建立统一shader材质代替单一shader,充分利用shader_feature、multi_compile,并将宏开关显示于界面。 图像混合代替多通道纹理,阴影投射、阴影接收、MetaPass、forwardadd 等pass不需要时要剔除。 少用alpha test、discard、clip、Alpha Converage等,因为会影响Early-Z Culling、HSR的优化。 避免Alpha Blend穿透问题(权重混合、深度剥离等透明排序方法代价太大了)。 光照贴图代替动态阴影、尽量不用实时光;阴影贴图、环境贴图用16位代替32位;利用projector+rtt或者光圈代替实时阴影。 将环境参数(风、雨、太阳)等shader全局参数统一管理。 非主角可以用matcap代替pbr、无金属不一定要用pbr

Shader预处理宏、内置状态变量、多版本编译等

你。 提交于 2020-01-18 01:05:33
预定义shader预处理宏:   Target platform:   SHADER_API_OPENGL - desktop OpenGL   SHADER_API_D3D9 - Direct3D 9   SHADER_API_XBOX360 - Xbox 360   SHADER_API_PS3 - PlayStation 3   SHADER_API_D3D11 - desktop Direct3D 11   SHADER_API_GLES - OpenGL ES 2.0 (desktop or mobile), use presence of SHADER_API_MOBILE to determine.   SHADER_API_FLASH - Flash Stage3D   SHADER_API_D3D11_9X - Direct3D 11 target for Windows RT   Surface shader pass indicators:   UNITY_PASS_FORWARDBASE - 前向渲染的base pass(主方向光、lightmaps、SH)   UNITY_PASS_FORWARDADD - 前向渲染的add pass(没盏灯一个pass)   UNITY_PASS_PREPASSBASE - 延迟渲染base pass(renders

Unity NPOI 无法读取xlsx

我的未来我决定 提交于 2020-01-17 20:08:41
遇到问题 在做编辑器开发时,需要在Unity Editor下直接读取Excel源文件,首先想到的是通过npoi去读取,但是遇到无法读取xlsx格式,只能读取xls格式的问题。 我的环境 unity 2018.3.6f1 npoi 2.4.1 xlsx指excel 2007格式 ,xls指excel2003格式 资料issues: https://github.com/tonyqus/npoi/issues/182 解决方案 在vs工程中安装npoi,找到依赖项 sharpziplib ,在 packages/ 目录下 (注:nuget安装包【npoi.nupkg】并不包含sharpzip.dll) 使用npoi对应版本的SharpZipLib ,放到unity中,就可解决,比如: NPOI.2.4.1/net40/*.dll SharpZipLib.0.86.0 注意:一定要使用npoi对应版本的sharpziplib,如果原unity工程中有sharpziplib,则替换掉。 无法创建xlsx格式 如果遇到npoi创建出来的xlsx无法打开,可尝试以下方法(注:wps可以打开,但ms office无法打开) 应该数据流写入的 是 .xlsx 的数据模式但是 用的是.xls的后缀名,导致数据识别错误 创建xlsx格式和xls格式 使用不同的接口 xls 2003格式:

unity之network客户端向服务器发送消息【Command】方法详解

孤街醉人 提交于 2020-01-17 18:09:49
如果是纯粹是聊天室功能则可以使用NetworkView的方法来进行,简单实用。 如果不是聊天室功能而是要传递数据给服务器,同时为了以后更多功能的拓展性,还是应该用network manager来实现。 无论是哪种方式,unet里的的一个特点就是:服务器端是会包括客户端的。换言之客户端和服务器是在同一个场景里开发的 。。。此处的包括二字何解?就是服务器端会自动生成一个player(之前很多文章都在讲unet的player与服务器同步的问题,那是入门级别的东西,多看看就知道是怎么回事)。这个player身上具备的属性就是客户端的玩家具备的属性。当然这个player只是代指客户端而已。实际可以理解为在networkmanager里自动生成一个客户端。 如果是做局域网的传输,在networkmanager里一定要注意不要勾选use websockets这一项。 本文案例为局域网,需求是客户端进行考核之后,客户端的系统逻辑会判断出分数,然后将分数传给服务器。而此处只说如何从客户端把分数传给服务器这一功能。 开始搞起: 新建一个场景,内容network(空物体)、client(红色的cube)、UI的Text显示文本(需要把客户端传来的值显示出来)。 然后在network物体上添加上networkmananger组件和managerHUD组件。不需要其他的另外的脚本了。

Unity文件夹增强插件Rainbow Folders

梦想的初衷 提交于 2020-01-17 17:22:56
本文是翻译其使用文档,帮助自己使用的一篇文章,如果需要插件,请加群 : 891555732 请注意 : 插件仅供于研究,请勿商用 你有没有想过突出显示常用的项目文件夹?这个简单但丰富多彩的资产允许您这样做! 有了“Rainbow Folders”,你可以在unity项目浏览器中为任何文件夹设置自定义图标和背景: 该包将被默认导入Assets/Plugins/RainbowAssets/RainbowFolders文件夹中。大多数用户喜欢将它保存在这里,但是您可以自由地将它移动到任何您想要的地方。点击编辑→项目设置→博罗达→彩虹文件夹,更新文件夹位置: 一. Configuring folder icons 要在你的项目视图中为某些文件夹应用自定义图标,只需按住修改键并点击Unity项目浏览器中的任何文件夹图标。默认情况下,它是Alt键,但你可以在 Project Settings → Borodar → Rainbow Folders 中更改Modofier Key。 您需要为每个文件夹项配置的是以下字段: Folder Name 图标将应用于所有具有该名称的文件夹。 or Folder Path(Name下拉可切换成Path) 图标将应用于具有指定路径的单个文件夹。 Icon 应该应用的自定义图标纹理 Background 应该应用的自定义背景纹理 Recursive

unity 控制物体移动的方法(持续整理ing)

半世苍凉 提交于 2020-01-17 16:52:31
Transform.Translate函数 using System.Collections; using System.Collections.Generic; using UnityEngine; public class move : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { //使小球按照y轴正方向以每帧1的单位长度移动 transform.Translate(Vector3.up * Time.deltaTime, Space.World); } } transform.Translate()函数中,前一个变量是物体的移动速度,这里的速度是一个矢量,既包含大小写包含方向,后一个变量是相对坐标系,这里的相对坐标系有两个值, 一个是世界坐标,Space.World 一个是自身坐标,Space.Self 如果第一个坐标不填写的话,默认为自身坐标系。 来源: CSDN 作者: Cuijiahao 链接: https://blog.csdn.net/cuijiahao/article/details/104019870