- 博客(71)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 mvp矩阵变换及世界坐标到屏幕坐标的实现
首先,我们将屏幕空间坐标的x值加1,然后除以2,将其范围从[-1,1]映射到[0,1]。然后,乘以相机在屏幕上的宽度,将其映射到像素坐标的x范围。最后,加上相机在屏幕上的左下角的x坐标,将其转换为屏幕像素坐标的x值。MVP矩阵是一种用于将对象的局部坐标(Model)转换到裁剪空间(Clip Space)的变换矩阵。这个组合矩阵MVP可以将一个点从局部坐标系(模型空间)直接转换到裁剪空间,实现了从对象坐标系到裁剪空间的一次性变换。类似地,我们也可以使用相同的方法将屏幕空间坐标的y值映射到屏幕像素坐标的y值。
2024-03-08 19:35:20 529
原创 垃圾回收(GC)
垃圾是指在程序运行当中,没有任何指针指向的对象,这个对象就是需要被回收的垃圾。垃圾回收(Garbage Colloect),是一种自动内存管理机制,它能够自动识别不再使用的对象,并将其从内存中释放,以便回收内存空间,回收分配的内存的过程就叫做GC。
2023-11-09 19:36:47 678
原创 lua # 获取table数组长度
如果数组最后的元素为 nil,那么不会算在长度内程序运行后,输出:3如果数组的最后的元素为 nil,不管几个,这些 nil 都不会被计算在数组的长度之内。
2023-11-03 22:08:55 1038
原创 XLua中lua读写cs对象的原理
从A环境传递一个对象a到B环境,会先在A环境的全局存储这个对象并建立一个a_id,保证这个对象不被GC,把a_id传递到B环境并构建一个包装对象a_wrapper,包含a_id,这样a_wrapper可以通过a_id访问到a。解决方案是lua对象释放的时候,手动调用一下c#对象的释放,把较大的内存释放掉,比如RawFileAsset对象中的byte数组data,lua释放这个对象时,手动把data置null,这样data就可以及时被GC,不用等lua gc。position并不是一个变量,而是一个属性。
2023-10-27 19:32:15 1160
转载 深入xLua实现原理之Lua如何调用C#
是腾讯的一个开源项目,为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力。本文主要是探讨xLua下Lua调用C#的实现原理。
2023-10-27 19:22:47 833
转载 深入理解xLua基于IL代码注入的热更新原理
以修复TestXLua.Add函数为例来描述一下整个热更过程先通过Generate Code为TestXLua.Add生成与其声明相同的匹配函数"__Gen_Delegate_Imp1",这个匹配函数是被生成在DelegateBridge类中的。有了这个匹配函数,Lua函数就可以被传递到C#中。然后通过IL代码注入,为TestXLua添加一个名为"__Hotfix0_Add"的DelegateBridge类型的静态变量。
2023-10-27 19:17:57 321
原创 Unity的IL2CPP
跟泛型实例一样,foo.Bar和foo.Bar是两个完全不同的方法,需要在主工程中显式调用过,IL2CPP才能够完整保留,因此需要尽量避免在热更DLL中调用Unity主工程的泛型方法。这么做的一个主要的好处是可以使得整个IL2CPP技术是简单并且是可移植的。每个泛型实例实际上都是一个独立的类型,List和 List是两个完全没有关系的类型,这意味着,如果在运行时无法通过JIT来创建新类型的话,代码中没有直接使用过的泛型实例都会在运行时出现问题。
2023-06-19 15:17:52 2492
转载 欧拉角与万向节死锁(图文版)
总结来说,欧拉角的“万向节死锁”问题,是由于欧拉旋转定义本身造成的。这种围绕选旋转前固定轴的先Z、再X、再Y的旋转操作,与其最终所预期的三个轴向可以旋转的结果并非一定是一对一的映射。某些情况下是多对一的映射,造成一些旋转自由度的缺失,也就是“死锁”。
2023-05-24 17:42:00 1733
转载 Unity--四元数(Quaternion)和旋转
旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——旋转和。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉旋转则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。那么,又是什么呢?简单来说,四元数本质上是一种高阶复数,是一个四维空间,相对于复数的二维空间。
2023-05-24 17:35:28 3991 1
转载 Unity3D UGUI系列之合批
在正式开始之前,咱们先做个准备工作:创建一个新场景,然后把自带的平行光给删除,讲相机的Clear Flags改为Solid Color。此时打开Game视图中的Stats面板,可以看到Batches数为1。(Stats面板上的参数怎么看,以及什么是Batches,可参考之前写的博客《Unity3D客户端项目优化总结之Stats统计面板》《Unity3D客户端项目优化总结之静态批处理Static Batching》)
2023-05-04 17:21:23 944
转载 Unity AssetBundle学习笔记
本文主要记录笔者学习Unity资源管理的过程。AssetBundle即资源包,它可以把多个游戏对象或者资源以二进制形式保存到Assetbundle文件中。AssetBundle中的单个资源称为Asset。Assetbundle支持所有unity可识别的格式:比如预制体、模型、声音、贴图、材质、Shader、场景、lua脚本等。1)ResourcesUnity编辑器下目录全部资源都会被压缩,转化成二进制。打包后该路径不存在,不可写也不可读。只能使用Resources.Load加载资源。
2023-04-03 16:44:30 1176 1
原创 Texture2D转字节数组出错 (Unsupported texture format - Texture2D::EncodeTo functions do not support ……)
Unsupported texture format - Texture2D::EncodeTo functions do not support compressed texture formats
2023-01-09 20:53:40 1313
原创 Unity3d读取安卓手机相册
开发环境:Android studio 3.5.2Unity3d 2020.3.25f1c1目录Android Studio部分1,创建New Project2,创建新的 Module ,命名test3,删掉默认创建的多余的Moudle app4,导入Unity3d的 classes.jar5,导入Unity3d的 UnityPlayerActivity.java6,创建MainActivity7,java代码部分8,AndroidMainFest 配..
2022-05-19 20:57:46 2917 2
原创 反编译 AndroidManifest.xml文件
1. Android安装包的结构我们将app的apk文件改为zip文件,然后解压就会看到如下图的Android安装包的结构了。Paste_Image.pngresources.arsc:这个文件是编译后的二进制资源文件的索引,也就是apk文件的资源表(索引)。 lib:目录下的子目录armeabi存放的是一些so文件。 META-INF:目录下存放的是签名信息,用来保证apk包的完整性和系统安全。但这个目录下的文件却不会被签名,从而给了我们无限的想象空间。 assets:目录...
2022-01-26 01:01:05 6319
原创 对Unity Mesh的理解
Mesh的组成Mesh是Unity内的一个组件,称为网格组件,Unity 的主要图形基元。Unity 中提供了各种组件来渲染常规或蒙皮网格、轨迹或 3D 线条。 Mesh网格 MeshFilter网格过滤器 Mesh Renderer网格渲染器 Skinned Mesh Renderer带蒙皮的网格渲染器 Mesh:是指模型的网格,建模就是建网格。细看Mesh,可以知道Mesh的主要属性内容包括顶点坐标,法线,纹理坐标,三角形绘制序列等其他有用属性和...
2021-08-23 16:41:33 1837
转载 Unity URP/SRP 渲染管线浅入深出【匠】
目录 SRP/URP/HDRP之间的关系 SRP是什么? URP是什么? HDRP是什么? 2. 为什么诞生SRP? 3. URP 和 内置渲染管线 性能对比 1. 首先来说说光照处理部分 2. 接下来看看SRP Batcher(重点) SRP Batcher 是什么? SRP Batcher是怎么优化的? 内置渲染管线和URP的CPU原理图对比: SRP Batcher 兼...
2021-05-19 11:31:23 993
原创 对Lua中Userdata的理解
目录一、概述二、源码实现相关函数实现1,lua_pushlightuserdata2,lua_newuserdata3,luaC_newobj(lgc.c)4,createstrobj(lstring.c)三、总结一、概述Lua中userdata分两类: 1,是轻量级userdata(light userdata),轻量级userdata是一种表示C指针的值,对Lua虚拟机来说,这种数据类型不需要GC(垃圾回收),其指向的内存由用...
2021-03-16 17:20:18 10856
原创 对Lua中 table.concat()的理解
目录基本解释创建代码运行结果总结 在使用 Lua 的过程中,当遇到需要连接大量字符串的时候,尽量不要使用字符串连接符 .. 进行连接,因为 Lua 中的字符串是不可变的,每进行一次连接就会复制生成一个新的字符串,随着字符串的长度越来越长,复制操作也会越来越耗时!这种情况采用 table.concat 进行连接效率会高很多!基本解释原型:table.concat (table [, sep [, i [, j]]]) 解释:返回表中的特定项连接后的数据,要求所连...
2021-03-15 17:25:21 5320
原创 Timeline脚本事件运用及常用接口使用
目录一、脚本事件运用代码部分:运行结果:二、常用接口使用一、脚本事件运用Add添加Playable Track轨道,在后面的轨道中右键会有Event System Playable文本显示,点击创建。代码部分:using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Playables;//Timeline脚...
2021-03-03 23:16:38 1386 2
转载 Unity加载设置:Application.backgroundLoadingPriority
Application.backgroundLoadingPriority: 这是Application类的一个个静态属性,可以控制后台加载线程的优先级,从而控制异步加载资源所需的时间,以及后台加载时对游戏性能的影响。 适用API: 加载对象(Resources.LoadAsync,AssetBundle.LoadAssetAsync,AssetBundle.LoadAllAssetAsync),场景(Application.LoadL...
2020-12-15 22:43:25 576
转载 什么是红黑树?
什么是红黑树? ————————————二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有...
2020-04-07 18:00:12 228
原创 Android APP性能优化总结
前述用android的同学都知道,新买的手机用过一段时间后,手机变得越来越卡了;装了一些APP后,电量用得飞快,一天基本要一充;有些APP打开半天加载不出来;有些APP进入某些页面突然闪退;还有用了一些APP,流量用得飞快,几百M的流量用了几天就没有了等等;这是什么原因呢?android系统源码是开放的,可以对源码的更改,像国内的几大手机厂商,都是对系统进入定制开发,这样...
2020-04-04 18:47:00 847
原创 点乘叉乘的应用
目录定义Vector3.normalized 规范化Vector3.magnitude 长度应用点乘(扇形攻击检测)叉乘(判断顺逆方向)定义弧长:等于半径的弧,其所对的圆心角为1弧度。圆周长: 2πr。上图得出:半径 = r1 = r2 = r3 = 1rad。周长 = 2πr1 = 2πr2 = 2πr3。一周的弧 = 2π*(1r...
2020-04-02 22:47:47 432
原创 递归算法
自己调用自己把复杂的逻辑简单化,可以求得最终结果。一,第30位数的值。1,有 1、1、2、3、5、8.......用递归算法求第30位数的值? 首先我们能够发现从第3位数起后一位数等于前两位数值之和,即:x=(x-1)+(x-2),x>2; 这里须要不断的相加,第一时刻就会想到循环处理,我们尝试用数组去装载这些数值,即:int[] a=new int[30...
2020-03-25 22:21:17 287
原创 快速排序
目录一、算法步骤二、代码部分三、算法分析快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。一、算法步骤1,从数列中挑出一个元素,称为 "基准"(pivot);2,重新排序数列...
2020-02-19 19:44:37 190
原创 冒泡排序
目录一、算法步骤二、代码部分1、第一种方法2、第二种方法3、第三种方法三、算法分析一、算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一...
2020-02-19 19:34:43 189
原创 Unity3D Profiler 连接真机和模拟器
目录一、打包部分1,Android设备设置2,BuildingSettings设置3,PlayerSettings设置4,打包5,Profiler监测二、真机连接(USB)1,Profiler监测程序2,注意事项三、连接模拟器(MuMu测试)1,市面上模拟器与端口2,连接方式3,注意事项四、真机连接(WIFI)1,输入ip...
2019-12-04 18:26:46 16060 1
转载 实现图片ETC+Alpha分离
目录原理步骤完整Shader代码 ETC纹理压缩格式 ETC1:它是一种为感知质量设计的有损算法,其依据是人眼对亮度改变的反应要高于色度改变,遗憾的是ETC1不支持透明。<p>ETC2:ETC2是ETC1的扩张,向后兼容ETC1,对RGB的压缩质量更好,并且支持透明通道。</p> 原理目前ETC2压缩格式在Open...
2019-12-01 22:21:30 378
原创 Unity3d贴图分析与整合
本文是整理的网上搜到的资料,经过分析整合的,文末有相关资料链接。目录一、开篇综述二、纹理资源压缩测试对比1. 分辨率 & 格式测试1:相同格式、不同分辨率的加载效率测试测试2:不同格式、相同分辨率的加载效率测试2. 开启Mipmap功能测试3:开启/关闭Mipmap功能的加载效率测试三、总结建议一、开篇综述 Android:如果对贴图质量要...
2019-12-01 22:10:02 957
原创 NGUI UICenterOnChild研究与测试
目录一,核心函数解析:二、案例制作1,最终效果2,Hierarchy 结构3,代码部分三、其它注意事项本文是基于Unity的NGUI插件中UICenterOnChild.CS脚本,对其中的核心函数做了解析,并制作了测试案例 。一,核心函数解析:1,Recenter 重定位最中心位置gameobject(一顿计算求出哪个离panel中心最新,然后调用Cen...
2019-11-15 12:17:52 579
原创 win10 64位搭建汇编环境debug
目录一,下载二,安装三,配置四,链接一,下载1,DOSBox0.742,MASM二,安装1,文件夹DOSBox0.74里面,解压、安装。注意不要安装在C盘。2,创建文件夹MASM到电脑的某个盘的路径下面,把下载的里面的MASM里面的文件(一堆.exe)复制到到这个MASM里面。我的是都放在一个文件夹下了(D:\SoftWare),安...
2019-11-06 20:23:14 2243 2
Unity3d打开手机相册完整工程实例
2022-05-21
APP搜索查询功能的实现原理
2015-03-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人