Unity C# News
C#
C#版本
.NET版本
发布日期
特性
C# 1.0
.NET Framework 1.0
2002-02-13
委托、事件
C# 1.1
.NET Framework 1.1
2003-04-24
APM(异步编程模型)
C# 2.0
.NET Framework 2.0
2005-11-07
泛型、匿名方法、迭代器、可空类型
C# 3.0
.NET Framework 3.0
2007-11-06
隐式类型
.NET Framework 3.5
2007-11-19
对象集合初始化、自动实现属性、匿名类型、扩展方法、查询表达式、Lambda表达式、 表达式树、分部类和方法、Linq
C# 4.0
.NET Framework 4.0
2010-04-12
动态绑定、命名和可选参数、泛型的协变和逆变、互操作性
C# 5.0
.NET Framework 4.5
2012-08-15
异步和等待(async和await)、调用方信息(Caller Information)
C# 6.0
.NET Framework 4.6
2015-07- ...
Audio In Unity
Audio In UnityUnity中支持的音频格式
MPEG layer 3
.mp3
Ogg Vorbis
.ogg
Microsoft Wave
.wav
音频交换文件格式
.aiff / .aif
Ultimate Soundtracker 模块
.mod
Impulse Tracker 模块
.it
Scream Tracker 模块
.s3m
FastTracker 2 模块
.xm
WAV:微软公司开发的一种声音文件格式,简单的编/解码、普遍的认同/支持以及无损耗存储,目前Windows上最流行的声音文件格式,资源大,不推荐
MP3:是MPEG标准中的音频部分,大小只有WAV文件的1/10,是一种有损压缩数字音频格式,失真小,适合音质要求高的文件,例如BGM
OGG:是一种新的音频压缩格式,类似MP3的音乐格式,它是完全免费、开放和没有专利限制的。压缩比高,适合人声、音效等
Unity Audio设置
Unity音频优化实践 - 知乎 (zhihu.com)
ProjectSetting- ...
Unity上架GooglePlay 未完待续...
前期设置
科学上网 谷歌账户 成为Google开发者Google Play 管理中心 | Google Play 管理中心
JDK 安装
SDK 按照 务必添加
Android Support Repository
Google Play Services
Google Repository
unity接入googleplay
Android 环境搭建与Android SDK目录介绍 - Charles-MQ - 博客园 (cnblogs.com)
Android SDK Manager和AVD Manager使用 - 康建伟 - 博客园 (cnblogs.com)
Unity中设置
只有IL2CPP才有64位
关于ARMv7 ARM64
arm64、armv7、armv7s是指什么? - 简书 (jianshu.com)
支持 64 位架构 | Google Play | Android Developers
设置keystone用Unity自带工具就可以,切记打包出来的APK和keystore签名确保一致
keytool -list -v -keystore ...
C#知识总结
泛型
泛型类
1234567891011121314//声明泛型类 T 表示一个占位 也可以声明多个public class TTest<T>{ public T value;}private void Start(){ TTest<int> testint = new TTest<int>(); testint.value = 10; TTest<string> teststr = new TTest<string>(); teststr.value = "aa";}
泛型方法
123public void TestFun<T>(T t){}
泛型接口
泛型约束
where
有6种
where T : struct类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。
12345678910111213public class TTest<T> where ...
数据结构
数据结构一、存储地址链式存储:储存单位的地址不一定是连续的顺序存储:储存单位的地址必须是连续的
二、存储空间利用率与分配链式存储:利用率低,动态分配顺序存储:利用率高,静态分配
三、修改内容速度链式存储:修改速度快顺序存储:修改速度慢
三、查询内容速度链式存储:查询速度慢顺序存储:查询速度快
Stack(堆栈)123456789101112131415161718192021222324252627282930313233343536373839404142434445private void StackTest() { //stack 栈是一种先进后出的数据结构 //比喻成汉诺塔叠块 最先放入的只能最后拿出来 Stack<int> stack = new Stack<int>(); #region 增 O(1) push 入栈 stack.Push(1); stack.Push(2); #endregion #region 删 O ...
Unity Live2D
Live2D
官网地址:Live2D Cubism【官网】
文件类型说明
1.关于Original WorkflowLive2D导入流程 自动为文件创建Prefab,添加对应脚本,一般设置为第一个选项
2. 文件导入直接将导出的文件拖入拖入unity,就会生成prefab,然后拖到场景中.可能遇到的问题:
拖入场景中不显示,随意改变一下参数即可
模型渲染顺序错误,修改渲染方式
文件导入后,提示Parameters错误,选择文件夹,重新Reimport
3. 基础的操作载入SDK | SDK 教程 | Live2D Manuals & Tutorials
Unity Live2D CubismSdk4进阶文档_kysaloyer的博客-CSDN博客
点击部位检测
重叠检测设置 | SDK 教程 | Live2D Manuals & Tutorials
自动眨眼设置
自动眨眼设置 | SDK 教程 | Live2D Manuals & Tutorials
眼自动跟踪设置Cubism Look Controller,查看代码可以自 ...
Coroutine In Unity
看了很多关于Unity 协程的文章,自己来总结一下.
Unity 中的什么周期链接:https://docs.unity3d.com/Manual/ExecutionOrder.html
上图其实可以看到,yield waitforEndOfFrame是在帧结束的时候,WaitForFixedUpdate是在所有物理更新结束之后,其他的都在update之后,LateUpdate之前更新.
Unity协程的本质Unity中协程并不是线程,只是Unity中的另一条逻辑,规定了相应的时间段然后响应某些事件.协程内部其实是一个迭代器. 如上面的生命周期,每一帧都会检测协程是否满足迭代器中MoveNext的条件,当满足的时候 就回去执行下一个条件,当没后面没有 那么就协程结束.例如下面的代码
123456789101112private IEnumerator Start() { while (true) { Debug.Log("Coroutine..."); yield ...
Font In Unity
使用unity的时候经常会用到较多的字体,本篇文章讲一下unity如何自定义字体以及在使用字体时的优化
如何使用Unity自定义字体 unity其实一直就有一个custom font功能,网上也能找到很多博客
然后设置相关参数
具体可以看看unity的官方文档和另一个文章
https://docs.unity3d.com/Manual/class-Font.html
http://www.manew.com/thread-110484-1-1.html
例如我们在制作数字(0-9)字体的时候就需要 一张数字图片,然后设置Character Rects,文档中说的很清楚,Index就是指的当前字的 ASCII码的索引(十进制),例如0=48 1=49…..
如果我们想设置更多的文字,也是可以的,因为Unity支持Unicode,但是我们需要一些步骤,将文字->16进制->十进制
这里有个在线的转换工具:http://www.ab126.com/goju/1711.html
关于编码可以查看这篇文章:http://www.ruanyifeng.c ...
Texture In Unity
这篇文章主要讲一下Unity中的贴图数据操作和内存计算方式以及相关优化
Unity中Texture中各种关系以及Apply()方法先抛出一个我无意间浏览到的一个博主写的关于Texture Texture2D RendererTexture 之间的关系.
链接:http://fargesportfolio.com/unity-texture-texture2d-rendertexture/
这里说一下 Texture2D的Apply操作,当我们使用SetPixel``SetPixels ReadPixels定要调用Apply方法,不然显示的还是原来的图,这里有个链接具体看下:https://blog.csdn.net/carefreeq/article/details/52635524
赋值完后为什么要Apply
因为在贴图更改像素时并不是直接对显存进行更改,而是在另外一个内存空间中更改,这时候GPU还会实时读取旧的贴图位置。
当Apply后,CPU会告诉GPU你要换个地方读贴图了
所以图片存在内存中,CPU指向这个图片地址,GPU根据CPU拿过来的地址来显示,如果更改了图片数据 ...
UGUI自适应
这篇文章说一下Ugui的适配.
Canvas Scaler下面的三种适配模式
Constant Pixel Size就是固定像素模式 下面有个可以调节的scale factor 调节整个画布缩放
Scale with Screen Size 随屏幕尺寸缩放,其实也就是缩放整个画布,本文重点介绍
Constant Physical Size 恒定物理尺寸(暂不讨论)
Scale With Screen Size 模式的UI适配当我们选择Scale With Screen Size 模式的时候,要求我们一个参考分辨率,下面缩放模式也有三种类型
先介绍一下后面两种模式
Expand模式与Shrink模式这两种模式是一个相反的模式,所以一起介绍
Expand 模式就是扩大,也就是会向长宽变化大的为参考进行缩放
Shrink 缩小模式, 向长宽变化小的为参考进行缩放,
有点绕口,我们结合实例来说
Eg1:
当我们选择参考分辨率为800*600 Expand 的时候
可以看到画布缩放是xyz是1.25
当选择Shrink模式的时候
可以看到变成了1.33 ...
UGUI优化
前言从Unity4.6版本加入UGUI以来,使用案例越多越多,相比NGUI,UGUI的效率要高的多
Ugui的网格合并实在C++代码中执行的,Ngui是在C#中执行
Ugui网格合并是多线程,Ngui是在主线程
Ngui维护图片的Depth比较困难,而Ugui渲染顺序是依据Hierarchy中的顺序
重点是 Unity堆出众多的UI视图工具都是针对UGUI的,例如Frame Debugger,Profiler中的UI模块
虽然不久之后应该会被其他的UI方案替代,但是现阶段最实用,最流行的UI方案还是Ugui.UI使用不当会造成各种问题,现在对Ugui进行下优化总结.
UGUI官方源码地址: https://bitbucket.org/Unity-Technologies/ui/src/
针对Ugui优化的四个方向
过多的GPU片段着色器使用率(如屏幕填充率过高)
过多的CPU时间开销在重建一个画布上 (画布划分)
过多的画布网格重建次数
过多的CPU时间开销在生成顶点上(通常是文本)
网格重建 UI中大多数的问题都是网格重建引起的
2020年4月19更新
...
Video in Unity
视频概念
硬解码:通过硬件(GPU)来解码视频,优点是效率高,降低功耗,缺点支持格式少
软解码:利用CPU来解码视频
**帧率:**视频是由于一幅幅图组合而成,帧率越高,表现的越丝滑
**码率:**也叫比特率,是一定时间内传输多少比特(bit)。计算方法:如一帧图大小是0.8kb,那么码率30帧就是0.8kbx8(一个byte有8bit)=6.4kbx30= 192 kb/s
推荐一个视频解码器:下载 K-Lite 编解码器包 (codecguide.com)
或者直接下载potPlayer和VLN软件也会自带一些解码器
Unity中播放视频;
VideoPlayer
AVPro插件
CRIWARE中国官网网站
Unity视频视频格式问题在unity中采用VideoPlayer播放视频会有很多日志警告
这里采用HandBrake软件对视频进行编码
Unexpected timestamp values detected. This can occur in H.264 videos not encoded with the baseline ...
Unity中的内存分配以及卸载
前言 遇到个项目需要从外部加载很多图片,外部图片不是规整的2的幂次方图,加载占用内存额外大,刚好看到雨松在unity content 上面关于unity 内存的文章 ,顺便记一下 (其实就是自己复述一遍,偷笑.gif)
Profiler深挖-Memory面板(5)
Profiler深挖-托管堆(9)
Profiler深挖-图解内存管理(10)
堆内存与垃圾回收
托管内存
.NET 有自己的垃圾回收,会帮我们回收堆内存,回收时间是不确定的,当我们new一个对象的时候就会产生托管堆内存
1234567class A : System.Object { } private void Update() { var a = new A(); }
因为new了一个新的对象 所以产生了堆内存
非托管内存
不是被.NET分配出来的内存,比如Unity里的贴图、网格、模型、材质Shader等等一些文件内存 ,如下代码所示,分别创建一个10X10和1024X1024的贴图资源。(Resources ...
git操作记录
git
git clone 克隆远程项目
git add . 添加所有文件到缓存中
git add 具体文件名 只提交相关文件
git commit -m “信息” 提交信息
git push origin master 提交到github库中
git push 推送到默认分支
git push -f 强制推送
git clone -b xxx https://github…… 下载分支代码 -b =branch
放弃本地强制更新
git fetch –allgit reset –hard origin/main main是分支git pull
git submodule
git submodule add git地址 路径 添加子模块 路径是相对于该项目下的文件夹例如:Assets/Res
git submodule add git地址 路径 例如添加分支 -b v1
git submodule init
git submodule update 这两个命令一起会添加子模块git
git submodu ...
GitHub+Hexo 搭建博客--我的第一篇博客
首先恭喜我…终于搭建好博客了 我来记录一下搭建的过程
工善其事 利先其器 下载所需工具
首先下载node.js 安装
下载 node.js'之后,cmd打开,执行命令 npm install hexo-cli -g 安装hexo, hexo官网
然后执行命令npm install hexo-deployer-git --save 安装部署到github的插件
选择一款你喜欢的主题 官方主题网址 https://hexo.io/themes/ 官方wiki网址 https://github.com/hexojs/hexo/wiki/Themes 然后使用git下载, 本网站使用了indigo butterfly
cmd走起 搭建博客 搭配hexo官方文档使用
找一个空文件夹.打开cmd 使用如下命令
123hexo init <folder>cd <folder>npm install
hexo init 有可能clone 失败,也可能中途一些其他问题,请多次尝试,下载成功界面
下载完成之后完整目录结构
hexo ...