<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MonoBehaviour的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/MonoBehaviour</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MonoBehaviour]]></copyright><item><title><![CDATA[FrameProfiling详细使用方法]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/131938004</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/131938004</guid><author>MonoBehaviour</author><pubDate>Wed, 26 Jul 2023 14:11:09 +0800</pubDate><description><![CDATA[Frame profiling_frame profiler_警醒与鞭策的博客-优快云博客]]></description><category></category></item><item><title><![CDATA[清除Material中的冗余资源]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/124823535</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/124823535</guid><author>MonoBehaviour</author><pubDate>Tue, 17 May 2022 16:00:47 +0800</pubDate><description><![CDATA[由于Unity的一个问题，导致Material中替换过的贴图，使用GetDepenecicies方法时会把替换掉的就资源也引用到。

替换方法：


public static void CleanMaterialSerializedProperty(List&lt;Material&gt; mats, ref string content)
    {
        for (int j = 0; j &lt; mats.Count; j++)
        {
            if (mat]]></description><category></category></item><item><title><![CDATA[Python调用adb实现自动化安装Apk]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/122823752</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/122823752</guid><author>MonoBehaviour</author><pubDate>Tue, 08 Feb 2022 14:47:23 +0800</pubDate><description><![CDATA[# -*- encoding=utf8 -*-
__author__ = "Lee.li"
"""
命名规则：
1.模块尽量使用小写命名，首字母保持小写，尽量不要用下划线(除非多个单词，且数量不多的情况)
2.类名使用驼峰(CamelCase)命名风格，首字母大写，私有类可用一个下划线开头
3.函数名一律小写，如有多个单词，用下划线隔开，私有函数在函数前加一个下划线_
4.变量名首字母尽量小写, 如有多个单词，用下划线隔开，后续字母大写
5.常量采用全大写，如有多个单词，使用下划线隔开
"""
...]]></description><category></category></item><item><title><![CDATA[资源导入后处理FBX中Animation的修改]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/122691605</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/122691605</guid><author>MonoBehaviour</author><pubDate>Tue, 25 Jan 2022 20:28:46 +0800</pubDate><description><![CDATA[修改的前提是设置ModelImporter 中importCameras = true;

然后增加动画属性：

未修改前FBX中的Animation



修改后FBX中的Animation：



代码：


public class ModelAnimationTool : AssetPostprocessor
{
    private void OnPostprocessModel(GameObject obj)
    {
        AnimationClipProperty(asse..]]></description><category></category></item><item><title><![CDATA[draw call 理解和优化]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/115221256</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/115221256</guid><author>MonoBehaviour</author><pubDate>Thu, 25 Mar 2021 23:07:39 +0800</pubDate><description><![CDATA[　draw call是openGL的描绘次数（directX没怎么研究，但原理应该差不多）

　　一个简单的openGL的绘图次序是：设置颜色→绘图方式→顶点座标→绘制→结束。

　　每帧都会重复以上的步骤。这就是一次draw call

　　如果有两个model，那么需要 

　　设置颜色→绘图方式→顶点座标A→绘制→结束。

　　设置颜色→绘图方式→顶点座标B→绘制→结束。

　　两次draw calls;

　　也就是说在openGl绘制前，如果色彩通道(color filter)，绘图方式(sha.]]></description><category></category></item><item><title><![CDATA[Unity中ShadowMap动态阴影的实现]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/114897433</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/114897433</guid><author>MonoBehaviour</author><pubDate>Tue, 16 Mar 2021 20:02:24 +0800</pubDate><description><![CDATA[具体的实现如下：

1，生成ShadowMap

2,根据ShadowmMap实现阴影的绘制



ShadowMap的生成：


v2f vert (appdata v)
            {
                v2f o;
                o.vertex = mul(unity_ObjectToWorld, v.vertex);
				float3 normal = normalize(mul(v.normal, unity_WorldToObject));
		]]></description><category></category></item><item><title><![CDATA[Unity资源加载与释放-AssetBundle]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/111217808</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/111217808</guid><author>MonoBehaviour</author><pubDate>Tue, 15 Dec 2020 15:22:57 +0800</pubDate><description><![CDATA[AssetBundle 与 Resources的区别


Resources相当于Unity一个缺省的AssetBundle。
AssetBundle可以在使用时动态加载。
Resources.load();在没有第一次Instantiate之前没有完全加载Asset资源。所以相对AssetBundle去实例一个资源，Resources会在第一次Instantiate时出现卡顿现象。

AssetBundle 加载与释放

AssetBundle的加载方式有：AssetBundle.LoadFromFile]]></description><category></category></item><item><title><![CDATA[C#中Dictionary＜TKey,TValue＞排序方式]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/109842870</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/109842870</guid><author>MonoBehaviour</author><pubDate>Fri, 20 Nov 2020 11:12:47 +0800</pubDate><description><![CDATA[C#中Dictionary&lt;TKey,TValue&gt;排序方式

按照Dictionary的Key值 升序排序(OrderBy)、降序排序(OrderByDescending)：



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp中Dictionary排序方式
{
    [Se]]></description><category></category></item><item><title><![CDATA[Unity Shader中的multi_complie和shader_feature]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/109675432</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/109675432</guid><author>MonoBehaviour</author><pubDate>Fri, 13 Nov 2020 15:12:45 +0800</pubDate><description><![CDATA[一，multi_complie 还是 shader_feature

shader_feature 和 multi_complie 是两个很相似的预编译指令，在Editor模式下，他们是几乎没有区别的。

共同点是：

声明Keyword，用来产生Shader的变体（Variant）

#pragma multi_compile A B
//OR #pragma shader_feature A B

//-----------------------A模块----------------------
#i]]></description><category></category></item><item><title><![CDATA[Unity Android平台的版本不对]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108510058</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108510058</guid><author>MonoBehaviour</author><pubDate>Thu, 10 Sep 2020 11:07:21 +0800</pubDate><description><![CDATA[MissingMethodException: bool UnityEditor.PlayerSettings.get_useSecurityBuild()

unity 安装的是海外版的，Android安装的是国内版的，导致打包报错，安装海外版的Android平台之后，打包正常
]]></description><category></category></item><item><title><![CDATA[减少ShaderLab大小方案]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108444771</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108444771</guid><author>MonoBehaviour</author><pubDate>Mon, 07 Sep 2020 11:31:05 +0800</pubDate><description><![CDATA[主要作用就是减少ShaderLab的大小，如下图，大概能减少30M左右的内存。

直接上代码：


private static void ReplaceStandard()
    {
        dicReplaceMat = new Dictionary&lt;string, List&lt;string&gt;&gt;();
            
        //替换所有fbx下material的shader
        string type = "*.fbx";
        ]]></description><category></category></item><item><title><![CDATA[Unity MeshRenderer 渲染排序问题（SortingLayer与order in layer的设置）]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108308014</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108308014</guid><author>MonoBehaviour</author><pubDate>Mon, 31 Aug 2020 14:38:57 +0800</pubDate><description><![CDATA[Unity中我们需要区分Layer（LayerMask），SortingLayer，SortingOrder他们的区别。Layer是Unity中方便在Player设置碰撞检测（如下图），还有就是方便Camera挑选显示各个层级（UI层，特效层，Player，NPC等，如下图），最多只能设置32个。SortingLayer是控制渲染的层级的，SortingOrder是控制层级中显示的顺序，是属于SortingLayer的。





    3d项目中，如创建一个cube，在Inspe...]]></description><category></category></item><item><title><![CDATA[HashSet资源管理中的使用]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108126026</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/108126026</guid><author>MonoBehaviour</author><pubDate>Thu, 20 Aug 2020 16:10:31 +0800</pubDate><description><![CDATA[废话不说，直接上代码：

public const string NoDepTypeFilter = "t:Model t:ShaderVariants t:Scene t:Prefab t:Shader t:Material t:AnimationClip t:Texture t:AnimatorController t:Font t:TextAsset t:ScriptableObject";


string[] filter = new string[]{".meta",".cs",".shader]]></description><category></category></item><item><title><![CDATA[模板测试的细节]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107962211</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107962211</guid><author>MonoBehaviour</author><pubDate>Wed, 12 Aug 2020 17:18:37 +0800</pubDate><description><![CDATA[1、简介



在Unity中一个像素会有多个缓存信息，模版缓存(其实Stencil不应该被翻译成模版，但网上都这么写)是其中之一。模板缓冲区可以为屏幕上的每个像素点保存一个无符号整数值，通过一些比较来改变当前像素区域模版缓冲的值，从而改变深度关系，似乎UGUI的Mask也是通过其实现的，延迟光照中Stencil有一些限制，具体看unity的文档，这里只介绍正向光照中的使用。



Stencil所在的渲染管线中的顺序位置：





Stencil的所有参数如下：


Stencil
｛
    R...]]></description><category></category></item><item><title><![CDATA[随机获取圆内点]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107645012</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107645012</guid><author>MonoBehaviour</author><pubDate>Tue, 28 Jul 2020 20:54:57 +0800</pubDate><description><![CDATA[System.Random random = new System.Random(1000);
//半径随机 ，弧度随机
public Vector2 GetCirclePoint(int m_Radius)
{
//随机获取弧度
float radin = (float)GetRandomValue(0, 2 * Mathf.PI);
float x = m_Radius * Mathf.Cos(radin);
float y = m_Radius * Mathf.Sin(radin);
Vector2 ]]></description><category></category></item><item><title><![CDATA[unity判断一个物体是否在正前方或者左右]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107549260</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107549260</guid><author>MonoBehaviour</author><pubDate>Thu, 23 Jul 2020 22:09:53 +0800</pubDate><description><![CDATA[1.点积
对于n维度代数定义:

几何的定义：a·b=|a|*|b|*cos&lt;a,b&gt;

1.1关于它的公式
而判断两个物体的位置 关系，是可以通过 这个 cos&lt;a,b&gt; 来判断，知道了这个余玄值，就可以知道 这个角度了。

它在Unity中 调用是通过Vector3.Dot()，Unity中使用的也是代数公式

 public static float Dot(Vector3 lhs, Vector3 rhs)
  {
   retu...]]></description><category></category></item><item><title><![CDATA[内存是手游的硬伤——Unity游戏Mono内存管理与泄漏]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107374138</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107374138</guid><author>MonoBehaviour</author><pubDate>Thu, 16 Jul 2020 00:48:29 +0800</pubDate><description><![CDATA[测试开发者的共同关注！

WeTest导读

内存是游戏的硬伤，如果没有做好内存的管理问题，游戏极有可能会出现卡顿，闪退等影响用户体验的现象。本文介绍了在腾讯游戏在Unity游戏开发过程中常见的Mono内存管理问题，并介绍了一系列解决的策略和方法。

无论是游戏还是VR应用，内存管理都是其研发阶段的重中之重。然而，90%以上的项目都存在不同程度的内存使用问题。就目前基于Unity引擎开发的移动游戏和移动VR游戏而言，内存的开销无外乎以下三大部分：

1.资源内存占用；

2....]]></description><category></category></item><item><title><![CDATA[shader 入门 《顶点（vertexs） 图元（primitives） 片元（fragments片断） 像素（pixels）》]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107346525</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107346525</guid><author>MonoBehaviour</author><pubDate>Tue, 14 Jul 2020 20:33:44 +0800</pubDate><description><![CDATA[顶点（vertexs）图元（primitives）片元（fragments，又叫片断）像素（pixels）

阶段1.顶点-&gt;图元

几何顶点被组合为图元（点，线段或多边形），然后图元被合成片元，最后片元被转换为帧缓存中的像素数据。

阶段2.图元-&gt;片元

图元被分几步转换为片元：图元被适当的裁剪，颜色和纹理数据也相应作出必要的调整，相关的坐标被转换为窗口坐标。最后，光栅化将裁剪好的图元转换为片元。

1）裁剪

在裁剪时点，线段和多边形处理略微不同。对于点，要么保留原始...]]></description><category></category></item><item><title><![CDATA[Unity Shader-法线贴图（Normal）及其原理]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107335885</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/107335885</guid><author>MonoBehaviour</author><pubDate>Tue, 14 Jul 2020 13:01:11 +0800</pubDate><description><![CDATA[简介



以前经常听说“模型不好看啊，怎么办啊？”答曰“加法线”，”做了个高模，准备烘一下法线贴图”，“有的美术特别屌，直接画法线贴图”.....法线贴图到底是个什么鬼，当年天真的我真的被这个图形学的奇淫杂技忽悠了，然而毕竟本人还算有点刨根问底的精神，决定研究一下法线贴图的原理以及Unity下的实现。本人才疏学浅，如有错误，欢迎指正。



法线贴图是目前游戏开发中最常见的贴图之一。我们知道，一般情况下，模型面数越高，可以表现的细节越多，效果也越好。但是，由于面数多了，顶点数多了，计算量也就上去了，效..]]></description><category></category></item><item><title><![CDATA[CacheServer搭建]]></title><link>https://blog.youkuaiyun.com/MonoBehaviour/article/details/106291336</link><guid>https://blog.youkuaiyun.com/MonoBehaviour/article/details/106291336</guid><author>MonoBehaviour</author><pubDate>Fri, 22 May 2020 21:38:02 +0800</pubDate><description><![CDATA[1.安装配置环境

下载Node.js 官网链接：

Node.js​nodejs.org

2.安装node.js并检查是否安装成功

安装完成后，打开windows 终端，输入 "node -v" 字符串，若安装成功则显示所安装node的版本号



3.安装cache server

安装教程：https://github.com/Unity-Technologies/unity-cache-server

在node.js环境上通过注册表安装

打开windowns 终端 输入： "npm ins.]]></description><category></category></item></channel></rss>