- 博客(35)
- 收藏
- 关注
原创 内存到底分几个区?
1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。2、堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放。5、程序代码区:存放函数体的二
2022-03-07 20:03:34 2118
原创 .Net源码学习——List<T>
目录一、变量二、属性1. Capacity三、构造函数1. 无参构造List()2. List(int capacity)3. List(IEnumerable collection)四、一些函数1. EnsureCapacity(int min)2. 以后再写五、在foreach中remove1. 聚焦_version2. 实验:在foreach中remove3. 查看IL4. 分析一、变量 private const int _defaultCapacity = 4;//默认容量是4;
2022-02-24 21:35:19 615 1
原创 Unity——Mathf.Atan和Atan2的异同
目录相同区别参考相同Atan 和 Atan2 都是求反正切函数如:有两个点 point(x1,y1), 和 point(x2,y2),那么这两个点形成的斜率的角度计算方法分别是:float angle = Atan((y2-y1) / (x2-x1));float angle = Atan2( y2-y1, x2-x1 );区别1:参数的填写方式不同。public static float Atan2 (float y, float x);public static float Ata
2022-02-15 19:39:48 3916
原创 Unity——URP获取相机栈
using UnityEngine.Rendering.Universal;Camera.main.GetUniversalAdditionalCameraData().cameraStack[0]
2022-02-15 16:45:03 3297
原创 .Net——IL之方法调度
目录简述直接调度简述在CLR中,以static修饰符来定义静态方法,而以instance修饰符来定义实例方法,二者的区别是静态方法只与类型相关,在编译期即可确定执行的操作,因此是静态的;而实例方法只与实例相关,在运行期才能决定执行的操作,因此是动态的。方法定义及IL方法调用及ILcall指令用于执行静态调度,而callvirt用于执行动态调度。callvirt使用虚拟调度,也就是根据引用类型的动态类型来调度方法;callvirt指令根据引用变量指向的对象类型来调用方法,
2022-02-05 21:35:32 550
原创 .Net——IL之实例创建
newobj和initobj关于newobj的分析:从托管堆分配指定类型所需要的全部内存空间。在调用执行构造函数初始化之前,首先初始化对象附加成员:一个是指向该类型方法表的指针;一个是SyncBlockIndex,用于进行线程同步。所有的对象都包含这两个附加成员,用于管理对象。最后才是调用构造函数ctor,进行初始化操作,并返回新建对象的引用地址。关于initobj的分析:这种构造不需要调用值类型的构造函数。具体的执行过程呢?以上例来说,initobj MyStruct的执行结果
2022-02-03 20:11:41 875
原创 .Net——元数据和IL
笔记cs代码编译之后将生成元数据和IL,并组成托管模块(Module)的基本单元。多个托管模块组成程序集,其实还包括一定的资源文件,例如图标、图片、文本信息等。程序集或者可执行文件是逻辑组织的基本单元,符合基本的Windows PE文件格式,可以被x86或者x64 Windows直接加载执行。一个或者多个模块,再加上资源文件就形成了程序集(Assembly),作为逻辑组织的基本单元仅仅从粗粒度对程序集的基本组成有个大致的了解,实际上程序集中包含
2022-02-03 16:11:13 969
原创 C#——模态显示和非模态显示
在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show)。模态显示:弹出窗口阻止调用窗口的所有消息响应。只有在弹出窗口结束后调用窗口才能继续。在模态窗口“关闭”后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值。非模态显示:可以在弹出窗口和调用窗口之间随意切换。调用窗口调用show方法后,下面的代码可以立即执行。在非模态窗口关闭后,窗口的所有资源被释放,窗口不存在,无法获取窗口的任何信息。...
2021-12-23 10:58:53 1296
原创 Unity——泛型单例、继承Mono的单例
目录一. 泛型单例二. 继承Mono的泛型单例1. 饿汉式第一种第二种2. 懒汉式一. 泛型单例public class Singleton<T> { private T _instance; private readonly object _locker = new object(); public T Instance { get { if (_instance == null) { lock
2021-12-22 18:11:57 3039
原创 Unity——Invoke
Invoke官方文档MonoBehaviour.Invoke描述public void Invoke (string methodName, float time)在 time 秒后调用 methodName 方法。如果时间设置为 0,则在下一个更新周期调用方法。在这种情况下,直接调用函数会更好。为获得更好的性能和可维护性,请改为使用协程。详述它应该在脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用。Invo
2021-12-17 17:19:55 2481
原创 操作系统——可变分区空闲空间管理
目录一. 关键问题:如何管理空闲空间二. 假设三 . 底层机制1. 分割2. 合并3. 追踪分配内存大小4. 如何在空闲内存内部建立列表四. 分配算法1. 最优匹配(best fit)2. 最差匹配(worst fit)3. 首次匹配(first fit)4. 下次匹配5. 分离空闲列表6. 伙伴系统一. 关键问题:如何管理空闲空间要满足变长的分配请求,应该如何管理空闲空间?什么策略可以让碎片最小化?不同方法的时间和空间开销如何?二. 假设基本的接口就像 malloc() 和 free()
2021-12-15 19:53:29 3102
原创 TortoiseGit——Load Putty Key选项为灰色无法勾选的解决办法
目录问题解决方法问题Clone代码时发现Load Putty Key为灰色,无法添加私钥解决方法将Setting - NetWork中的SSH client中的地址改为 TortoiseGit安装目录下的bin文件夹里TortoisePlink.exe
2021-12-08 00:28:49 1545
原创 Unity SceneManager
SceneManagerclass in UnityEngine.SceneManagement描述运行时的场景管理。静态变量sceneCount当前加载的场景总数。sceneCountInBuildSettingsBuild Settings 中的场景数量。静态函数CreateScene在运行时使用给定名称创建一个新的空场景。GetActiveScene获取当前活动的场景。GetSceneAt
2021-12-07 10:15:36 2639
原创 小数十进制转十六进制
1、小数的十进制转换成十六进制的方法:十进制小数转十六进制小数,方法为乘十六取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为十六进制小数,这时就需要取近似值。例: 0.9032D转化成16进制小数0.9032*16=14.4512 取整数14 即E0.4512*16=7.2192 取整数70.2192*16=3.5072 取整数30.5072*16=8.1152 取整数80.1152*16=1.8432 取整数1所以这个数转换成16进制就是0.
2021-10-15 08:52:07 11355
原创 AssetBundle加载管理器
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;public class ABLoaderManager : SingletonAutoMono<ABLoaderManager> { private AssetBundle _mainAB = null;//主包 private AssetBundleManifest
2021-10-11 01:28:58 159
原创 AssetBundle入门
目录1、什么是AssetBundle2、AssetBundle的打包流程3、AssetBundle的加载与卸载(1)同步加载(2)异步加载(3)AB包依赖(4)AB包卸载1、什么是AssetBundle2、AssetBundle的打包流程3、AssetBundle的加载与卸载(1)同步加载 //加载ab包,*一个包只能加载一次,加载两次会报错 AssetBundle ab1 = AssetBundle.LoadFromFile(Application.streamingAssetsPath +
2021-10-10 22:29:20 131
原创 骨骼原理笔记
一. 骨架: 树状结构, 关节点组成二. 关节:关节名父关节索引(根关节的父关节索引为-1,为无效索引)关节绑定姿势的逆变换矩阵(offset矩阵) struct Joint{ Matrix4x4 m_inverseBindPose; const char* m_name; U8 m_iParent; }; struct Skeleton{ U32 m_jointCount; // 关节数 Joint* m_aJoint; // 关节
2021-09-29 17:30:43 659
原创 Unity游戏开发
编译规则不同文件夹编译有顺序优化编译框架类放在Plugins 文件夹逻辑类放Plugins 外,若代码量大,将部分代码预编译为DLL编译DLL程序集
2021-09-27 23:17:13 119
原创 动画IK(待补充)
目录IK概念IK使用IK概念//TODOIK使用1、在Layer页面点击齿轮,勾选IK Pass2、写脚本,OnAnimationIK()public class IKTest : MonoBehaviour { Animator animator; public GameObject target; private void Awake() { animator = this.GetComponent<Animator>(); }
2021-09-09 00:07:49 274
原创 DOTS学习笔记
https://www.u3dc.com/archives/3509目录什么是DOTS一个小案例DOTS调试面板什么是DOTS一个小案例1、Struct结构体数据继承IComponentData接口public struct PrintComponentData : IComponentData { public float printData;}2、系统脚本继承ComponentSystem,遍历所有实例找到对应的组件数据脚本public class PrintCompone.
2021-08-31 00:04:59 357
原创 C#中单例模式各实现方法与总结
单例模式一. 概述二. 实现1. 饿汉式(1) 通过静态变量初始化(2) 通过静态构造函数初始化2. 懒汉式 (不推荐)3. 简易线程安全的懒汉式 (性能不佳)4. 双检锁懒汉式 (DCL)三. 总结一. 概述私有构造函数, 防止外部代码进行实例化私有静态变量, 存储类的唯一实例公有属性 / 方法获取实例, 判断为空, 创建实例, 不空, 获取实例二. 实现1. 饿汉式(1) 通过静态变量初始化 public class Singleton { private st
2021-08-26 00:01:27 445
原创 Unity中射线Ray用法
PropertiesDescriptiondirectionThe direction of the ray.originThe origin point of the ray.ConstructorsDescriptionRayCreates a ray starting at origin along direction.Public MethodsDescriptionGetPoint Returns a point at dis...
2021-08-25 20:55:55 523
原创 C#中Dictionary遍历方法
Dictionary<string, int> dic = new Dictionary<string, int>(); //键值对 foreach (var item in dic){} foreach (KeyValuePair<string, int> kv in dic){} //通过键 foreach (string key in dic.Keys){} //通过值 foreach (int val in dic.Values) {}.
2021-08-25 20:28:28 1599
原创 C#类中各类型成员初始化顺序
C#中类成员初始化顺序代码打印结果总结代码 class Father { static int f = SetF(); int f1 = SetF1(); static int SetF() { Console.WriteLine("父类静态变量"); return 1; } static int SetF1() { Console.Write
2021-08-22 20:51:28 361
原创 Scale With Screen Size原理
UI Scale Mode学习笔记1、Scale With Screen Size1、Scale With Screen SizeScreen Match Mode = Expand这里设定屏幕分辨率800*600,参考分辨率1920*1080,Canvas的宽高根据缩放模式对应算法设置为1920*1440(这里1440对比参考分辨率就体现了Expand),中间的image组件,锚点居中,大小为1920*1080。缩放计算方法:缩放系数 = Mathf.Min(800/1920,600/1
2021-06-17 23:03:57 1002
原创 面试题——模拟移动
public List<List<int>> SimMove(List<List<int>> units, int frameCount) { //List<List<int>> result; for (int i = 0; i < frameCount; i++) {//跑回合数 for (int j = 0; j < units.Count; j++) ...
2021-06-15 19:59:42 111
原创 面试题——整理背包
#region 整理背包 /// <summary> /// 背包整理是游戏中常用的逻辑,将玩家目前背包中的所有格子,按照ID排序统一摆放,同时每个格子中的道具数量不能超过20. /// 输入 /*[[100,4], [101, 5], [0, 0], [100, 5], [101, 8]],20 输出 [[100, 9],[101,13]] 说明 正常的整理*/ .
2021-06-15 19:14:51 645
原创 新安装的Unity2020创建新项目时报错
报错:弹窗进入安全模式,进去之后代码报错打不开无法解决,百度搜索说缺少Editor\Data\Tools下的D3Dcompiler_47.dll,将另一个2019版本的复制到2020版本文件夹下可以进入项目,但是仍有报错。解决:关闭360,在拦截记录中发现其拦截了2020安装时修改dl文件。l...
2021-04-03 21:29:45 3419
原创 Unity引擎入门
Unity引擎入门一、Scene场景和Hierarchy层级窗口1、Hierarchy中的快捷键2、Scene场景(1)工具栏(2)坐标(3)常用操作一、Scene场景和Hierarchy层级窗口1、Hierarchy中的快捷键F2:对象改名Ctrl+C:复制Ctrl+V:粘贴Ctrl+D:克隆一个Delete:删除、2、Scene场景(1)工具栏(2)坐标以屏幕为参照物垂直屏幕向内为Z正方向平行屏幕向右为X正方向平行屏幕向上为Y正方向(3)常用操作...
2021-02-07 00:54:24 873
原创 Ruby‘s Adventure
Ruby's Adventure报错Can't add script报错Can’t add script错误原因:类名与文件名不匹配
2021-01-18 20:32:44 524
原创 C语言 '.' 和 '->' 之间的区别
(*a).b 等价于 a->b。"."一般情况下读作"的”,结构体a的b。“->”一般读作"指向的结构体的",a指向的结构体的b。
2020-02-19 21:41:35 2845
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人