unity

Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

独自空忆成欢 提交于 2020-01-11 05:02:53
一  protobuf-net优化效果图   protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建。它是一个网络传输层协议,对应的lua版本有两个可用的库:一个是proto-gen-lua,由tolua作者开发,另外一个是protoc,由云风开发。protobuf-net在GC上有很大的问题,在一个高频率网络通讯的状态同步游戏中使用发现GC过高,所以对它进行了一次比较彻底的GC优化。下面是优化前后的对比图: protobuf-net优化前GC和性能效果图 protobuf-net优化后GC和性能效果图 二  Unity3D游戏GC优化概述   有关Unity3D垃圾回收的基本概念和优化策略Unity官网有发布过文章: Optimizing garbage collection in Unity games 。这篇文章讲述了Unity3D垃圾回收机制,和一些简单的优化策略,讨论的不是特别深入,但是广度基本上算是够了。我罗列一下这篇文章的一些要点,如果你对其中的一些点不太熟悉,建议仔细阅读下这篇文章:   1、C#变量分为两种类型:值类型和引用类型,值类型分配在栈区,引用类型分配在堆区,GC关注引用类型   2

Unity录屏

烂漫一生 提交于 2020-01-11 02:35:39
一、准备工作 使用到的插件:ffmpeg 和 ScreenCapturerRecorder。 ffmpeg 录屏的核心,ScreenCapturerRecorder是对ffmpeg的扩充插件。 ffmpeg 放在工程的StreamingAssets中,如图: ScreenCapturerRecorder直接安装就行,装完桌面会有一个这样的图标: 弄好这两个东西基本就准备好了。 二、功能逻辑 调用ffmpeg的逻辑,是使用命令行的方式,具体可参考文章: https://blog.csdn.net/qq_21397217/article/details/80537263 // 参数:-b比特率 -r帧率 -s分辨率 文件路径 文件名 //private const string FFARGS_DSHOW = "-f dshow -i video=\"screen-capture-recorder\" -f dshow -i audio=\"virtual-audio-capturer\" -y -preset ultrafast -rtbufsize 3500k -b:v {0} -r {1} -s {2} \"{3}\"/{4}.mp4"; //+麦克风 private string FFARGS_DSHOW = "-f dshow -i video=\"screen-capture

Unity UnityEngine.Component.GetComponents 文档

浪子不回头ぞ 提交于 2020-01-10 14:38:30
Component.GetComponents官方文档 官方没有说明的接口是: public void GetComponents<T>(List<T> results); 其中,results会自动清空,并填入所得的组件。 还有一个接口是: public void GetComponents(System.Type type, List<Component> results); 同上,results会自动清空,并填入所得的组件。 来源: CSDN 作者: hackerzhuli 链接: https://blog.csdn.net/mynameiszhuli/article/details/103922925

unity对接百度地图(显示地图和自身位置)

蓝咒 提交于 2020-01-10 13:11:05
我是将unity工程导出为android工程,将定位脚本和需要的jar包依赖等加入,如下 LocationCustomDemo package com . baidu . map . demo . layers ; import android . app . Activity ; import android . content . Context ; import android . content . Intent ; import android . os . Bundle ; import android . util . Log ; import android . widget . Toast ; import com . baidu . location . BDAbstractLocationListener ; import com . baidu . location . BDLocation ; import com . baidu . location . LocationClient ; import com . baidu . location . LocationClientOption ; import com . baidu . map . R ; import com . baidu . map . UnityPlayerActivity ;

Unity VFX踩坑

喜欢而已 提交于 2020-01-10 11:44:16
先挖个坑,要实现如下效果,这几个Demo都来自Unity日本分布技美总监Keijiro Takahashi,效果过于酷炫,请收下膝盖。。 Keijiro Takahashi Github: https://github.com/keijiro 来源: https://www.cnblogs.com/Mr147/p/12175182.html

Unity处理MP3流播放

拟墨画扇 提交于 2020-01-10 08:19:46
Unity处理MP3流播放 PCMReaderCallback回调 Unity音频数据是通过AudioClip去处理的,它提供了PCMReaderCallback回调,用于加载流音频数据。它的声明如下: public static AudioClip Create(string name, int lengthSamples, int channels, int frequency, bool stream, AudioClip.PCMReaderCallback pcmreadercallback); public delegate void PCMReaderCallback(float[] data); PCMReaderCallback中的PCM指的是音频数据格式,下面会讲到。在stream模式下,lengthSamples表示播放时,每次循环处理的sample数,这会影响到回调参数data的大小。回调函数参数data就是需要填充的音频数据,它的格式是PCM,data的长度可以由lengthSamples * channels计算出来。 值得注意的是,PCMReaderCallback执行环境不一定,它是由Unity回调的,可能是主线程,也可能是子线程。所以当它卡住的时候,可能会卡掉整个应用。 PCM格式 PCM是Pulse Code Modulation的缩写

作用让UI在指定矩形范围显示 超过范围透明

人走茶凉 提交于 2020-01-10 00:49:32
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt) Shader "UI/Default-ClipRect" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) _StencilComp ("Stencil Comparison", Float) = 8 _Stencil ("Stencil ID", Float) = 0 _StencilOp ("Stencil Operation", Float) = 0 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 /

Unity启动界面 删除指定项目

点点圈 提交于 2020-01-09 16:09:36
问题: Unity历史打开项目过多的话,会使启动页不方便,看起来杂乱的很。如图 删除一些没用的启动列表就很有必要了,看起来会非常的舒适。 Regedit 打开注册表 看看你启动页哪个不想要排第几个,在注册表中删除即可! 来源: CSDN 作者: 芝麻粒儿 链接: https://blog.csdn.net/qq_27489007/article/details/103906985

Unity旋转角色

泄露秘密 提交于 2020-01-09 13:40:11
currentHero为当前角色模型 private void OnGUI ( ) { if ( Event . current . type == EventType . MouseDown ) { //判断当前手指是按下事件 touchFirst = Event . current . mousePosition ; //记录开始按下的位置 } if ( Event . current . type == EventType . MouseDrag ) { //判断当前手指是拖动事件 touchSecond = Event . current . mousePosition ; //记录拖动的位置 currentHero . transform . Rotate ( new Vector3 ( 0 , - ( touchSecond . x - touchFirst . x ) , 0 ) * 1.5f , Space . World ) ; touchFirst = touchSecond ; } } 来源: CSDN 作者: coooliang 链接: https://blog.csdn.net/cl61917380/article/details/103904519

Unity直接读取Excel之Unity quick sheet

馋奶兔 提交于 2020-01-09 13:15:46
方便 强大 易用! 文档: http://kimsama.github.io/Unity-QuickSheet/ 源码: https://github.com/kimsama/Unity-QuickSheet Unity-QuickSheet Unity-QuickSheet使您可以在Unity编辑器中使用google和excel电子表格数据。 使用Unity-QuickSheet,即使不编写一行代码,也可以从电子表格中检索数据并将其保存为具有可脚本化对象格式的资产文件。 特征 无需编写任何代码行。 它可以从excel文件中检索数据。 (同时支持xls和xlsx格式。) 它可以从Google电子表格中检索数据。 无需解析任何检索到的数据,它会自动将检索到的数据序列化为Unity3D的ScriptableObject,因此它比XML格式快。 用法 电子表格 Google试算表 参考文献 有关Unity序列 化机制的详细信息,请参见Unity论坛上的Unity序列化。 GDataDB 用于从Google Spreadsheet检索数据。 请注意,对 GDataDB 进行了稍微修改以支持 枚举 类型。 ExposeProperties 用于轻松在Unity3D的检查器视图上公开电子表格的变量,并允许 GDataDB 通过获取/设置访问器进行访问。 NPOI 用于读取xls和xlsx文件。