自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

少侠Smile丶

记录游戏程序员的美好生活

  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 揭开IL代码的神秘面纱--基础篇(一)

本文阅读时长几分钟,我相信能带你走进解读IL代码的大门。前言偶然一次心血来潮,想要了解更深层次的代码运行逻辑,然后就触碰到了IL代码,结果看完后一发不可收拾(想多了)。对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的。1.1 什么是ILIL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编..

2021-03-07 22:15:31 3300 1

原创 Unity 通过解析libil2cpp.so文件查看Android Crash崩溃原因

近期项目出现了网络状态切换时,android手机会出现高概率崩溃的情况。话不多说,直接上crash日志:E/CRASH: signal 6 (SIGABRT), code 0 (?), fault addr --------出现这种CRASH,网上也都有详细介绍,一搜一大堆介绍,但对我排错没啥帮助,不是重点,这里跳过。然后我们筛选崩溃的这个线程的日志,会从里面找到这个线程crash之前的一些操作日志,比如:前面的是执行堆栈地址,由下往上执行的,后面是执行所在的库文件,我们找到libil2cpp.

2020-07-18 19:20:07 13151 10

原创 Unity Editor编辑器扩展开发之批量设置图片压缩格式(详细)

网上很多代码设置图片压缩格式的案例,都很简单,提供思路,随时百度。本篇文章是为了满足项目需求,加了一些功能:1】基本的,选择文件夹/某个文件,批量设置该文件夹下所有有效文件的压缩格式2】自行选择平台以及压缩格式3】根据是否有Alpha通道自行处理格式(RGB的格式仍然转成对应的RGB)4】辅助功能:获取选择文件夹下/某个文件,某平台下所有文件的压缩格式并合并分析(项目中很多手误导致很多格式设置不正确)本文涉及大部分的Unity Editor的UI绘制API,互相学习。效果如下:获取所有信息

2020-07-17 22:36:35 1704

原创 Unity Assets 资源加载与优化干货笔记(一)

干货预警!!!Unity Assets 资源加载与优化笔记一、资源加载与使用二、版本管理三、Unity打包资源四、资源卸载五、关于AssetBundle六、游戏对象七、特殊文件夹八、推荐资源加载策略九、查找资源引用关系一、资源加载与使用1】所有Assets目录下的资源都可以被AssetDatabase类访问并加载。资源分为两类:一类时引擎可识别的资源,prefab,声音,视频,动画,UI等;第二类是第三方导入的,通过第三方工具解析成引擎可识别的资源。一些常用操作的APIAssetDatabase

2020-07-11 18:15:35 6643

原创 韩国ONE store平台支付集成(android)

前端时间接入韩国Onestore平台的时候踩了一些坑,国内的文档又很少,记录一下,废话不多说。我们开始吧。内容一览官方接入文档开始集成支付逻辑集成一、集成步骤二、集成代码三、集成问题官方接入文档官方文档有中英韩三种语言,可移步官方接入文档开始集成1】目前的新版本是V5,直接放V5的jar包。从gizub下载OneStore在应用程序中购买SDK2】清单文件添加//(必需)添加API版...

2020-03-07 11:25:37 4318

原创 Facebook登陆SDK接入(Android)

11

2020-02-29 20:36:08 3214 3

原创 python入门一篇博文就够了

1】关于python的“入口函数”python没有像大多数语言那样有一个Main()入口函数,python脚本的执行会依次执行脚本内的每行代码(除def后定义的函数外)。那有些人会问,python里面的 if name == “main”: 是怎么回事?看下面的一个hello.py脚本2】简单的示例示例:删除文本文件中所有的0-9数字,并统一添加0-9数字。3】稍复杂的示例...

2019-09-26 10:05:11 386

转载 Unity骨骼优化后为什么蒙皮还能生效?

若采用第二种方案,在进行骨骼节点优化后,因为骨骼节点都被剔除,因此无法绑定骨骼,会出现蒙皮不显示了,解决方案是保证skinMeshRender预制体加载路径和之前FBX文件内层级一致,之后重新激活Animator组件即可(暂未找到其他方法),确保animator中的avatar引用骨骼节点优化后的FBX文件内的avartar。注意当骨骼节点被优化后, Transform节点被剔除,因此需要将挂点等需要用到的节点暴露出来,即下面两个接口中的exposedTransNameList可以传入需要保留的节点路径。

2023-11-16 20:49:26 121

原创 关于C#List<Struct>的Remove操作GC问题

本文主要探讨关于C#中对值类型的List.Remove操作的GC问题。

2023-05-18 12:55:11 365

原创 Xcode报错找不到C++标准库malloc.h

'malloc.h' file not fount

2023-04-03 10:49:13 753

原创 UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 352: illegal multibyte sequence

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 352: illegal multibyte sequence

2023-03-20 21:26:57 148

原创 关于LuaGC算法的演化概述

对Lua GC算法的演化过程做一个概述,快速了解其工作原理

2022-12-11 15:41:44 455

原创 Unity Editor Scene视窗自定义工具组件

Unity Editor Scene视窗自定义工具组件

2022-10-23 08:00:00 288

原创 Unity Editor 在Scene视窗绘制小地图

Scene视窗绘制场景的小地图

2022-10-22 08:00:00 272

原创 Unity Editor 代码控制场景可见性(SceneVisibility)

SceneVisibility

2022-10-21 10:08:32 854

原创 正则表达式(秒懂~)

让你能够瞬间掌握正则表达式

2022-09-26 10:43:48 177

原创 Shell 常用操作指令

Shell 常用操作指令以及报错处理

2022-09-06 20:59:19 239

转载 用Unity来实现一下绳子效果——Obi Rope插件介绍

文章转自:用Unity来实现一下绳子效果——Obi Rope插件介绍 - 知乎知乎上看到一篇关于Obi Rope插件实现的绳子效果的文章,内容比较详细,还有好多演示,记录分享。Unity绳索

2022-03-28 16:21:50 1349

原创 C#8.0新特性详解--大道至简

C#8.0新增了14个新的特性,代码项目会针对每个特性从定义、使用、目的、影响四个方面进行示例讲解。

2021-12-28 20:21:42 3993

原创 C#8.0特性篇之索引和范围

索引和范围的特性,可以使我们很方便的获取序列(比如数组)中的某一段数据或者某个位置的数据,跟python的索引差不多。为此,C#添加了两个新的类型和两个新的运算符以达到此目的。

2021-12-06 20:33:05 1362

原创 Unity各版本对C#版本的支持

一、Unity各版本对应C#版本的支持二、C# 语言版本控制,.net目标框架对应C#版本的支持三、Unity各版本及更新日志四、C#各版本新增特性五、其他:

2021-08-27 10:25:39 9054

原创 C#代码考究--foreach、for和dictionary三种遍历方式性能比较

在日常开发过程中,我们会经常用到遍历,那么几种遍历方式有什么优缺点呢?**一、foreach:**本文foreach案例是对泛型List进行遍历操作List<int> m_list = new List<int>();foreach (var item in m_list){ // ...}foreach的实现,实际是会调用List的GetEnumrator()方法,返回一个新的迭代器(struct类型)并自动调用try-finally..

2021-08-08 14:33:20 2613

原创 揭开IL代码的神秘面纱--基础篇(二)

系列文章目录 揭开IL代码的神秘面纱--基础篇(一)揭开IL代码的神秘面纱--基础篇(二) 揭开IL代码的神秘面纱--进阶篇(一)持续更新中......工具IL指令大全IL指令分类IL代码编译器 ILDasm前言 接基础篇(一),主要以案例为主,继续学习IL代码,本文主要内容是方法的返回值以及bool类型的使用。带着问题1:方法的返回值存储在哪里?接收返回值和不接收返回值有什么区别?带着问题2:以下两个代码有什么本质区别...

2021-03-15 10:03:49 1211

原创 揭开IL代码的神秘面纱--进阶篇(一)

如果没有看前篇文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库..

2021-03-07 22:16:29 1050 1

原创 C#100问--为什么值类型不允许定义无参构造函数?

直接回答:为了防止开发人员对这种构造器在什么时候调用产生迷惑,导致发生影响程序性能的问题,所以干脆禁止。详细解答:首先CLR是允许这种行为的,只是C#编译器不允许。当程序new一个无参的值类型时,会分配一片内存(该片内存是已经分配过的),并将这片内存的脏数据(之前存储了一些其他数据)清理掉,即zeroed,这个工作是CLR调用IL形式的initobj指令完成的。当程序new一个无参的值类型时,new操作符就被编译成initobj指令。考虑到有些情况会使用无参构造函数,而有些情况不能使用,容易造成困

2021-02-02 00:01:45 777

原创 位运算符的使用说明以及使用技巧

位运算符的计算假设如果 A = 10,且 B = 5,现在以二进制格式表示,它们如下所示:A = 0000 1010B = 0000 0101A & B = 0000 0000 按位与运算符: 全为1 才为 1A | B = 0000 1111 按位或运算符: 有一个为1 就为1A ^ B = 0000 1111 按位异或运算符: 不同才为1~A = 1111 0101 按位取反运算符: 全部取反A << 2 将得到 0010 1000,即为

2020-11-04 13:15:09 971 2

原创 值类型的装箱和拆箱--深度解析

对于值类型的装箱和拆箱,《CLR Via c#》一书中用了大量页数来讲,足以表明其重要性。CTS有两种类型:值类型和引用类型。两种类型的互相转换通过装箱和拆箱完成。装箱:将值类型转换成引用类型拆箱:将引用类型转换成值类型值类型存在两种形式:未装箱和已装箱装箱内部实现过程:1、在托管堆中分配内存。分配的内存量时值类型各字段所需的内存量,加上托管堆所有对象都会有的两个额外成员(类型对象指针和同步块索引)所需的内存量。2、值类型的字段复制到新分配的堆内存中。3、返回对象地址(引用)。拆箱内部实现

2020-11-02 19:32:01 599

原创 一图搞懂CLR,CIL,CTS,CLS,FCL,BCL之间的关系

CLR: 公共语言运行库(Common Language Runtime)CIL: 通用中间语言(Common Intermediate Language,简称CIL,亦称IL)CTS: 通用类型系统(Common Type System)CLS:公共语言规范 (Common Language Specification)FCL: 框架类库(Framework Class Library)BCL: 基础类库(Base Class Library)...

2020-10-31 17:26:13 2624 2

原创 《CLR Via C#》5.2值类型和引用类型

目录一、CLR支持两种类型:值类型(线程栈分配)和引用类型(托管堆分配)二、值类型和引用类型的区别:一、CLR支持两种类型:值类型(线程栈分配)和引用类型(托管堆分配)几个基本事实:1、内存必须从托管堆分配。2、堆上分配的每个对象都有一些额外成员,这些成员必须初始化。(类型对象指针和同步块索引)3、对象中的其他字节(为字段而设)总是设为零。4、从托管堆分配对象时,可能强制执行一次垃圾回收。(0代对象容量不足时)任何可称为“类”的类型都是引用类型,比如System.Exception类所有值类

2020-10-30 23:14:44 2155

原创 python实现二分查找

python实现二分查找# -*- coding:utf-8 -*-""" 二分查找升序数组内某个值"""import osimport sysclass Solution(object): def search(self, nums, left, right, target): #找完了 return -1 if left > right: return -1 #就剩一个了,直接判断

2020-10-25 15:03:09 171

转载 unity mono和IL2CPP的区别

unity mono IL2CPP

2020-10-19 15:08:53 4568 2

原创 为什么有符号整型最小值是-32768?

有符号整型和无符号整型的表示范围是怎么确定的?无符号整型和有符号整型的区别就是无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。举例说明:比如2位的一个二进制 00 (int32 32位太长了,拿2位比较)无符号,能表示00(0),01(1),10(2),11(3)这0 1 2 3 四个数二进制

2020-10-18 22:41:10 1944 1

原创 Unity WindowsSDK对接之win窗口句柄、进程、常见问题处理

持续更新中…常用代码1】查找窗口句柄[DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);// 查找记事本窗口句柄IntPtr hWnd = FindWindow("Notepad", null); 2】获取当前进程Process curProcess = Process.GetCurrentProcess();int cur

2020-09-30 10:54:33 1763

原创 unity打包的windows程序运行权限问题整理

在Vista以后的windows版本中,有些时候需要提升编译后生成程序的权限,即希望让生成的程序以管理员身份运行。虽然在一般情况下,可以使用鼠标右键选择的方式来强行以管理员身份运行,但它并没有屏蔽普通运行方式,而且普通人通常也不会使用右键选择以管理员身份运行,所以必须在生成程序时就限定程序只能以管理员方式来运行。在Vista以后的windows版本中,微软引入了UAC机制,它的目的是防止程序对操作系统本身进行恶意篡改。要让程序以管理员身份运行,就需要在程序中引入UAC标注,也即让程序显示“UAC盾牌”(就

2020-09-26 14:48:33 2568

原创 链表面试题思路整理(图解)

1】返回单链表倒数第K个元素思路:快慢指针,快指针先走K,然后一起走,快指针=null的时候,慢指针指向的就是2】判断两个链表是否相交,并返回交点思路1:求出两个链表的长度,计算长度差m,长的先走m,然后一起走,如果相等则相交并第一个就是交点。思路2:链表a和链表b一起走,a走完自己以后走b,b走完自己以后走a。如果相等则相交并第一个就是交点。3】判断链表是否有环,环的长度,环的入口思路:快慢指针, 快指针每次走2格,慢指针每次都1格,如果相遇则必有环。如果再次相遇,中间慢指针走过的路程就

2020-08-30 09:19:06 140

原创 排序算法--堆排序

推荐讲解很好的文章https://www.cnblogs.com/chengxiao/p/6129630.html堆排序时间复杂度O(nlogn) 要进行n-1轮交换位置调整堆,每次调整要执行约logn次堆排序空间复杂度O(1) 因为堆排序本质是选择排序,数组内部数据交换,只是临时交换数据的内存。...

2020-08-13 20:46:22 114

原创 C# List<>.Sort() 排序的底层实现原理

首先,C# List<>.Sort() 排序的底层实现原理就是快速排序 + 堆排序(.net 4.5用的内省排序)。大佬可以 return了。接下来,让我们一一还原案发现场。源码干货预警,头大!!!!!// 1,看到我们调用的Sort方法public void Sort(IComparer<T> comparer){ Sort(0, Count, comparer);}// 2,进入Sort(), 这里只关注倒数第二行,调用了Array.Sort()public

2020-08-13 14:53:42 3230

原创 Lua 取table表长度的底层原理

本来想自己写一下,不小心看到了大佬的一篇文章,非常详细全面。https://www.jianshu.com/p/1e8ab8fe55e4

2020-08-13 11:44:32 882 1

原创 C#知识点之 is和as的使用

关于类型的判断和转换有is和as这2个操作符。具体区别和用法如下is就是处于对类型的判断。返回true和false。如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。另外is操作符永远不会抛出异常。代码如下:void main() { parent p1 = new parent(); parent p2 = new child(); child c1 = new child(); Debug.LogError(p1 is child); //false

2020-08-13 11:27:19 466

原创 排序算法--归并排序的两种方法

用递归实现:private void MergeSort(int[] arr, int[] tempArr, int start, int end){ if(start >= end) return; // 求出中间的索引 int mid = ((end - start) >> 1) + 1; // 区分左边和右边 int start1 = start, end1 = mid; int start2 = mid + 1, end2 = end; // (先分解

2020-08-13 11:04:14 649

策略模式游戏相关案例源码

策略模式游戏相关案例源码,包含《战斗执行策略》《技能选取敌人策略》以及多个不同版本的优化方案和建议。

2020-05-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除